Conditional tags returning different results for different areas on a page?

I may have misinterpreted what you are asking here but you don’t need to do this using pre_get_posts().

Instead you could either add this to your functions file:

function output_page_type() {
    global $post;
    $pagename = $post->post_name;
    return $pagename;
}

and then on the relevant page
echo output_page_type();
to get the page title.

Or you could use switch and the appropriate conditional tags i.e. is_page() is_home() is_tax() is_archive() etc. You can then output the correct page type that way. I like to do this in the header so its only needed once. For example:

    switch (n)
    {
    case is_home() :
      echo "Home";
      break;

    case is_page() :
      echo "Page";
      break;

    case is_category() : // Category
      echo "Category";
      break;

    case is_tag() : // Tags
      echo "Tag";
      break;

    case is_single() : // Single
      echo "Single";
      break;

    case $wp->query_vars['post_type'] : // Custom Post Type
      echo $wp->query_vars['post_type'];
      break;

    case is_tax() : // Custom Taxonomies
      echo "Tax";
      break;

    case is_archive() : // Standard Archive
      echo "Archive";
      break;

    default:
      echo "Some other randomness";
      break;
    }