Try to use the post object provided by the action as the second parameter instead of getting it from database:
function change_event_slug_on_save( $post_id, $post ) {
...
}
add_action( 'save_post', 'change_event_slug_on_save', 10, 2 );
With this you can remove the line $post = get_post($post_id);
EDIT:
Tribe Events Calendar has it’s own actions for saving an event: tribe_events_event_save
and tribe_events_update_meta
. Since the event date is saved in post_meta you should use the second action:
/**
* @param int $event_id The event ID (alias post ID).
* @param array $data The saved meta fields. The new date should be somewhere in this array
* @param WP_Post $event The event itself (alias $post).
*/
function change_event_slug_on_save($event_id, $data, $event) {
...
}
add_action('tribe_events_update_meta', 'change_event_slug_on_save', 10, 3);