How to handle free and paid orders with post processing?
You would be better to implement a custom payment method that can be active when the order has a 0 balance.

If the order has payment required, use the standard payment method.
If the order has no payment required, complete checkout.

e.g: https://drupal.org/project/commerce_no_payment