To start this off, you should not be using query_posts for custom queries. Directly from the codex
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 be using WP_Query. You should also have a read here
Ok, now to the actual problem. You have the_title() and wp_title() mixed up here. the_title() displays the post title in posts, and should be in the loop. wp_title() retrieves page title, and should be used in the header. Again I quote from the codex
This function, and not a work-around, is required for publicly by WordPress standards.
So you need to change
<title><?php the_title(); ?></title>
to
<title><?php wp_title();Â ?></title>
in your header