Try to run your query with
"suppress_filters" => true
WP_Query
allows for posts to be added after the query has run. found_posts is the actual queried amount of posts, post_count is updated after running the filters.
If this fixes it search your code (Any active code, check network activated plugins as well) for the_posts
or posts_results
filter and check if that is causing it.
Another reason for this could be sticky posts as we discovered in the comments, these can be disabled using
"ignore_sticky_posts" => true
By default WP_Query adds sticky posts to the first page of archives where is_home()
is true.