WP_query Date Range results not matching loop

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.