Single.php different behaviour from admin to non-admin

Per a comment, the problem was due to the use of query_posts which clobbers the main query.

Please don’t use query_posts.

It should be noted that using this to replace the main query on a page
can increase page loading times, in worst case scenarios more than
doubling the amount of work needed or more
. While easy to use, the
function is also prone to confusion and problems later on. See the
note further below on caveats for details.

http://codex.wordpress.org/Function_Reference/query_posts (emphasis mine)

In addition, it overwrites $wp_query which the main Loop on the page uses.

If you need additional loops use a new WP_Query object, not query_posts.