network_query_posts returns all results when no posts match tax_query

I'm using network_query_posts, and querying based on taxonomy terms. I'm finding that if there are no results which match the tax_query, network_query_posts seems to return all posts/pages, whereas it should return none.

Here's the code I'm using in my plugin:

$args  = array(
        'post_type'      => 'any',
        'posts_per_page' => 10,
        'tax_query' => array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => $terms, // this is an array with one or more strings in it.
                'operator' => 'IN'
            ),
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => $terms,
                'operator' => 'IN'
            ),
        ),
    );

if ( network_have_posts() ) { // check we have something to display
        while ( network_have_posts() ) { // start the loop
            network_the_post();
            // stuff here...
        } // end the loop
    }
    else { $output = 'No posts :('; }
}

Is there anything obvious I'm doing wrong here?