Upon further investigation, we found out that there is a problem with the total being 0 when you have only 1 payment method. Below is the current logic in www/administrator/components/com_virtuemart/classes/ps_checkout.php. Around line 860 within the list_payment_methods function should be this logic:
<?php
if ($count <= 1 && $cc_payments==false) {
vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&payment_method_id=$first_payment_method_id&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false ),"");
}
//elseif( isset($order_total) && $order_total <= 0.00 ) {
elseif( isset($order_total) && round($order_total,2) <= 0.00 ) {
// In case the order total is less than or equal zero, we don't need a payment method
vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false),"");
}
?>
The first "if" statement checks to see if you have only one payment processor. And if you do automatically select it instead of bringing up the payment method page. The second "if" checks to see if the order total is 0 if so skip the selection of payment method. The second "if" should come before the first logically. So first check if the order total is 0, if so skip everything, otherwise see if it is just 1 payment processor, if so go to confirm page, choosing it. Here is the original code reworked:
<?php
if( isset($order_total) && round($order_total,2) <= 0.00 ) {
// In case the order total is less than or equal zero, we don't need a payment method
vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false),"");
}
elseif ($count <= 1 && $cc_payments==false) {
vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&payment_method_id=$first_payment_method_id&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false ),"");
}
?>