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.