I was writing a plugin which used the Network_Query class and found that if get_posts() is called, the $posts array will contain the posts from the last time it was called in addition to the results from the present call.
Since get_posts is called when Network_Query is instantiated, any subsequent calls will always cause the posts array to be "double populated".
You can quickly reproduce this by doing something to the effect of:
$wp_query = new Network_Query( $query_variables ); $posts = $wp_query->get_posts();
This is caused by the area around line 2672 in networkquery.php. The function always appends the retrieved posts to the $posts array and never clears it (if you look at the commented out code from WP_Query on 2675, you will see $posts gets overwritten in the default implementation).
I've worked around this behavior by pulling from $posts directly (to avoid editing Post Indexer itself); since get_posts is public and Network_Query is designed to function exactly like WP_Query, it might be worth implementing a fix.