We had this issue as well. Weirdly, it seems to only raise an error the first time it attempts to transition an order to payment_failed. Our messy fix was to rescue the order.complete call, then let the user be redirected to the payment step with a payment unsuccessful flash. I'm interested, have you found a more straightforward solution?