I think we're too conservative about invalidating this cache. To reproduce:
- Create an event from some time in the past to some time in the future.
- Move the start date forward to at least 24+ hours past the current time.
- Only caches with a TTL ahead of getStartDateTimeEpochForCache() get invalidated, but the start time epoch is now further in the future than the old cache.
We could invalidate ahead of the minimum of the old epoch and the new epoch, but I think it's probably simpler to invalidate unconditionally.