Post Pagination Showing Same Posts Every Page

The posts_per_page refers to how many posts per page, and not what page you are viewing. For that, you want to set the paged argument. See the Codex on WP_Query and this article by Scribu.

With the paged argument set, it’ll return the appropriate posts depending on the page number (the first x posts for page 1, the next x posts for page 2 etc). If not, you are always querying the first x posts- hence the same for each page.

For instance, instead of

query_posts($args, 'posts_per_page=".$paged);

use

$args = array_merge( $args, array( "paged' => $paged ) );
query_posts($args);

and instead of

query_posts('posts_per_page=".$paged);

use

query_posts("paged='.$paged);