Is wp_reset_postdata always necessary?

If you called the_post() on the query, then yes. This resets the global variables used in the main queries.