WP_Query based on multiple metadata comparisons

You could split this into two WP_Querys:

 $args = array(
   'post_type' => 'match_report',
   'post_status' => 'publish',
   'meta_key' => 'report_type',
   'meta_value' => 'cup',
   'fields' => 'ids'                                 
 );

$reportsPre = new WP_Query($args);
$post_IDs = array();
if(isset($reportsPre->posts) && !empty($reportsPre->posts)){
  foreach((array) $reportsPre->posts as $id) {
    $post_IDs[] = $id;
  }
}

$args2 = array(
   'post__in' => array($post_IDs),
   'meta_query' => array(
       'relation' => 'OR',
          array(
             'key' => 'report_home-select',
             'value' => $team_id,
             'compare' => '=',
          ),
          array(
             'key' => 'report_away-select',
             'value' => $team_id,
             'compare' => '='
          )
   ));

  $reports = new WP_Query($args2);

I’m not near a computer where I could test this but it should work.