posts_nav_link pulling in multiple post types

query_posts should be avoided at all costs. This is not just my emphasis, but the codex’s as well

Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).

You should also have a look at this post for further explanation

You should use WP_Query in this instance.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//content goes here
<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

<?php $my_query = new WP_Query( 'post_type=wpsc-product'); ?>
    <?php if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
    //content goes here
    <?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

<nav id="page_nav">
    <?php posts_nav_link( ' ', ' ', ' '); ?>
</nav>