Thank you for waiting, as I was able to narrow down the conflict on your website.
On your website's clone, I noticed that there were many custom time intervals registered, for the forms to check for the post-expiration date/time.
This option is available at WP Admin -> Toolset -> Settings -> Forms, under the section 'Post expiration'.
I couldn't find any custom code that was being used to register these custom intervals, so these intervals must be coming from some existing or past third-party plugins.
Here are the steps, that I'll recommend:
1. You can register a custom interval that checks for the post-expirations, every 12 hours, using the following code:
( it can be included in the active child theme's 'functions.php' file )
add_filter ('cred_post_expiration_cron_schedules', 'custom_function_12hours_interval', 10,1);
function custom_function_12hours_interval ($schedules) {
$schedules['twelve'] = array( 'interval' => 720 * MINUTE_IN_SECONDS, 'display' => __( 'Every 12 hours' ) );
return $schedules;
}
2. Next, from WP Admin -> Toolset -> Settings -> Forms, under the section 'Post expiration', select this newly registered time interval 'Every 12 hours'.
3. Using the form 'Create package', add 3 new package posts, with the expiration date set to tomorrow, the day after tomorrow, and the two days after tomorrow, respectively.
Important note: When we select a date through the date field, the time for the selected date is set to 12 at midnight of the selected date. And since we've set the form to check every 12 hours, you can expect the post-expiration code to work for those posts, around and after midday of the selected dates.
Please run this test and you'll see that the expiration code and notification will be working as scheduled.