After much searching, and lots of help here (thanks again, Sally CJ), this the code I ended up using.
$category_terms = get_terms(array('taxonomy' => 'categories'));
$series_terms = get_terms(array('taxonomy' => 'series'));
$custom_post_type="cpt";
foreach( $category_terms as $category_term ) {
foreach ($series_terms as $series_term) {
$args = array(
'post_type' => $custom_post_type,
'showposts' => '5000',
'meta_key' => 'available_date',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'categories',
'field' => 'id',
'terms' => $category_term->term_id,
),
array(
'taxonomy' => 'series',
'field' => 'id',
'terms' => $series_term->term_id,
'operator' => 'IN'
),
),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
//do stuff here
}
}
}