TBH the way this schedules single cron events for each expire is plain awful, you are correct it doesnt work on a vanilla 4.6 install either. Anyway I will rewrite the cron routine myself as its garbage coding…
Also means if you programmatically insert posts with wp_insert_post then set post_meta _expiration-date, _expiration-date-options and _expiration-date-status
it does not schedule the cron event so nothing will happen even though the date is saved and shows ok in edit post screen..
So you need to call _scheduleExpiratorEvent($id,$ts,$opts) rather than set post_meta
But that isn’t a solution for me anyway as I would have 5000+ cron event scheduled in no time at all.
I wish people that write modules for wordpress would appreciate there are sites that are much larger than a few pages.