Same posts within a paginated page

The problem is that you are running query_posts in the middle of the page, which, by the way you should nearly never do. That will overwrite the main query– the global $wp_query object. Pagination should probably appear to work. The problem is that the original main query runs before your template loads and thus before the modified version of your query runs, and because of that the main query and the one that is being paginated are out of sync.

You probably need to use a filter on pre_get_posts, something like this one, instead of running another query in the middle of the page. In your case you are going to need to pull in some information.

Here is a best guess at what you need (completely untested):

function pre_get_posts_wpse_104225($qry) {
  if (is_main_query() && !is_front_page()) {
    $et_ptemplate_blog_perpage = isset( $et_ptemplate_settings['et_ptemplate_blog_perpage'] ) 
      ? (int) $et_ptemplate_settings['et_ptemplate_blog_perpage'] 
      : 10;

    $blog_cats = isset( $et_ptemplate_settings['et_ptemplate_blogcats'] ) 
      ? (array) $et_ptemplate_settings['et_ptemplate_blogcats'] 
      : array();

    $cat_query = implode(",", $blog_cats);

    $qry->set('posts_per_page',$et_ptemplate_blog_perpage);
    $qry->set('category__in', $cat_query);
  }
}
add_action('pre_get_posts','pre_get_posts_wpse_104225');

I am sure you would need more conditions that this– if (is_main_query() && !is_front_page()) {— but I can’t tell exactly what else.