The logic behind this being the way it is right now, is to cater for situations where you are offering a free trial.
Take the scenario of a hosting package which usually costs $5/month, with a one time promo code making the first month free, the order total is $0.00 - and no payment is required - but what happens in month 2. You still need to know how they wish to pay. And if you didn't collect any info at the time of signup, then the customer is required to come back, login and and submit that info to you.
Of course if you have a gateway like PayPal, or 2CheckOut, etc... then the user is never sent to any gateway to actually pay so no payment is actually required.
So the question is how should this behave if the product is not always going to be free?