Modifing archive query affects show post count function

pre_get_posts does not explicitely changes the value in the db of posts_per_page, this value stays constant to the value set in the back end under the readings settings. pre_get_posts only changes this value before the SQL query is build in WP_Query right before the main query runs.

If you need to get the exact ( more specific ) amount of posts per page set for a specific page when using pre_get_posts, access the query vars which will hold the new value set by pre_get_posts. (NOTE: query_posts breaks the main query object, so if you use query_posts somewhere on the page, this will also fail as you will get an incorrect value. This is ONE BIG REASON why you should never ever use query_posts Here is an answer that explains this in detail.)

Instead of using

get_option( 'posts_per_page' );

use

$wp_query->query_vars['posts_per_page'];