I have pinpointed the problem: Sticky posts.
Posts that are designated as sticky posts appear *in addition* to the number of posts_per_page requested.
To see this in action, request, say, 3 posts, and make sticky a post that is not within the 3 most recent posts. You should see 4 posts, with the sticky in the first position.
I fixed it by adding
'ignore_sticky_posts' => 1 to the below. This prevents stickies from showing at the top but will leave them showing in their natural order by date, if they happen to fall within the requested number of posts:
// Set up initial query for post
$args = array(
'post_type' => $post_type,
'tag' => $tag,
'category_name' => $category,
'posts_per_page' => $posts_per_page,
'order' => $order,
'orderby' => $orderby,
'ignore_sticky_posts' => 1
If you agree, perhaps you could update the plugin so I don't have to hack it and babysit it?