Perform function on publish AND save (not just save)

Instead of taking meta values from get_post_meta function take it from $postarr array because when initial publishing of the post there isn’t any values for event_datestart and venue_name in database and it returns empty string.

Updated Code :

function set_event_title( $data , $postarr ) {
  if($data['post_type'] == 'event') {
    $getdate = $postarr['event_datestart']; // Replace event_datestart with the input field name of event_datestart post meta.
    $dateformat = new DateTime($getdate);
    $date = $dateformat->format( 'm-d-Y' );
    $event_venue = $postarr['venue_name']; // Replace venue_name with the input field name of venue_name post meta.   
    $event_title = $event_venue . ' - ' . $date;
    $post_slug = sanitize_title_with_dashes ($event_title,'','save');
    $post_slugsan = sanitize_title($post_slug);
    $data['post_title'] = $event_title;
    $data['post_name'] = $post_slugsan;
  }
  return $data;
}
add_filter( 'wp_insert_post_data' , 'set_event_title' , '99', 2 );

For more information see this page.