I’m having the same issue. On WordPress 5.3 and PHP 7.3.
When I add/update an expiration date on a post or page, it saves on the post/page itself and I can come back and change it. The cron job is never created within the WordPress database. For posts/pages with expiration dates prior to whatever broke it are still in the list of cron jobs. If I change the expiration date on those posts the events in the cron job database remain unchanged. It seems that is where the breakdown is.
Post-Expirator Debug Logs:
Timestamp Message
2020-01-14 14:10:32 3122 -> SCHEDULED at Fri, 17 Jan 2020 20:10:00 -0500 (1579291800) with options Array ( [expireType] => draft [id] => 3122 )
2020-01-14 14:03:09 9596 -> SCHEDULED at Sun, 19 Jan 2020 18:53:00 -0500 (1579459980) with options Array ( [expireType] => draft [id] => 9596 )
2020-01-14 13:39:13 9596 -> SCHEDULED at Sun, 19 Jan 2020 18:53:00 -0500 (1579459980) with options Array ( [expireType] => draft [id] => 9596 )
2020-01-14 13:29:57 9024 -> SCHEDULED at Tue, 10 Mar 2020 13:43:00 -0500 (1583847780) with options Array ( [expireType] => delete [id] => 9024 )
Upcoming Cron Jobs – do not coincide with the actions above:
Thu, 30 Jan 2020 21:17:00 -0500 postExpiratorExpire
0 => 9198 Single Event
Sun, 02 Feb 2020 21:16:00 -0500 postExpiratorExpire
0 => 9196 Single Event
Sat, 08 Feb 2020 15:21:00 -0500 postExpiratorExpire
0 => 9402 Single Event
Fri, 28 Feb 2020 15:07:00 -0500 postExpiratorExpire
0 => 9536 Single Event
Sun, 15 Mar 2020 13:43:00 -0500 postExpiratorExpire
0 => 9024 Single Event