I experienced an issue where trying to purchase a product for $0 (though the use of a coupon), the transaction workflow never got updated to completed automatically like it would if the price was > 0. I found that this was happening because each of the separate payment methods have the same code that checks if all the items in a transaction are non-shippable and if so sets the workflow to completed, but if the price is $0 then the store module never invokes a payment method and the workflow doesn't get updated.

Rather than force each payment method to do this check it seems like it should be done uniformly in once place, whether a payment method is used or not.

I've only dug around a little bit through the ecommerce code, but it seems a plausible place to do this would be in store_payment_status_complete_callback