Setting ExpiryTime=2200 solves the problem (though the log message is now incorrect
Quote
[2457: Wed 21-05-19 19:40:00] 6361 -58.00 637/505 (410.77)
[SPY::SC45525] Expired OTM 1 Call 20210519 414.0 100@410.78: +324 Unl 410.78 at 19:40:00 Thu <--should be Wed
[SPY::SP45526] Expired ITM 1 Put 20210519 418.0 100@410.78: -413 Unl 410.78 at 19:40:00 Thu

[2458: Thu 21-05-20 19:40:00] 6329 0 637/505 (415.18)

I don't think using market close regardless of actual expiry time/abandoning ExpiryTime is reasonable: CME FX options have moved in Sept 2019 to morning expirations(10am)...there might be some other cases.

But:
- the default ExpiryTime should indeed be set after the market close - to cover the majority of cases
- it should be in BarZone time, not UTC.