strange behavior with comment position

You could probably just buffer the output from comments_popup_link in a separate function.

function get_comments_popup_link( $zero = false, $one = false, $more = false, $css_class="", $none = false ) {
    ob_start();
    comments_popup_link( $zero, $one, $more, $css_class, $none );
    return ob_get_clean();
}