I don’t think this is an ACF issue anymore. I tried this standard WP call:
$expirationtime = get_post_meta($post->ID, 'expiration', true);
and got the same results – no value returned.
I think Divi is probably the culprit, so I’ll see if their support can shed any light on the problem.
Thanks again for looking at this, John.
EDIT: I have it working now, and for anyone interested in the solution, the check for the expiry field needs to be in Divi\includes\builder\module\blog.php (not in page.php)