SERP Features are Inherently Volatile
It's not really a perfect science. The extent of our control here is limited. All we can really do is add the right structured data to our content and hope for the best. It's not uncommon to have issues even with perfect markup. Happens to me all of the time.
Especially for events, I'd recommend implementing your schema markup about a month ahead of time to allow you to debug/test. I've looked through your code and have a couple recommendations for where to start based on my experience.
Add Optional Parameters (When Appropriate)
You're missing two optional fields - Organizer
and/or Performer
, and while both are optional, to ensure that your rich results consistently show you should use all of the properties that Google recommends.
So in your case, it looks like Organizer
is appropriate. Let's go ahead and add that.
Include Images Sized to Google's Specifications
Google recommends that images are 1920px wide (the minimum width is 720px). Below is the dimensions of the image that you're currently using.

Also, you need to provide more than just one image. As you'll see below, Google needs 3 with specific aspect ratios; one for desktop, one for tablet, and one for mobile.
Additional image guidelines (via Google):
Every page must contain at least one image (whether or not you include markup). Google will pick the best image to display in Search results based on the aspect ratio and resolution.
Image URLs must be crawlable and indexable. To check if Google can access your URLs, use the URL Inspection tool.
Images must represent the marked up content.
Images must be in a file format that's supported by Google Images. For best results, provide multiple high-resolution images (minimum of 50K pixels when multiplying width and height) with the following aspect ratios: 16x9, 4x3, and 1x1.
For example:
"image": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
]
FYI
Your payment api keys and product identifiers are publicly visible in your source code. These keys should not be visible on the client side. These calls should originate from the server.
This is in <script>
tags in your html.
window.OCCSN = {"api_key":"[your-api-key]","host_url":"https://app.getoccasion.com","product_id":"SvXrSdVW","spreedly_key":"[your-api-key]","square_key":"[your-api-key]","stripe_key":"[your-api-key"};
window.OCCSN.onOrderComplete = function(order) {
OccsnTrck.triggerEvent('completeOrder', {
txn_id: order.verificationCode,
value: order.price.toNumber(),
currency: order.product().merchant().currency().name,
affiliation: order.product().venue().name,
});
}