I think the issue was a caching setting on WordPress (using WordFence Performance Settings) possibly combined with a user’s browser cache. I did some experiments on a test event, setting the end sale time within a few minutes and saw that the tickets were still available after the time had passed until I cleared site and browser cache. I now no longer have WP caching any url with /event/ at start but have no control over a user’s browser cache — or do I?
I’m glad you were able to find a solution for this one. The users browser cache shouldn’t be impacting too much here. It could potentially allow the tickets to appear, however a purchase shouldn’t be able to be completed even if they had a cached version of the event page.