My flow is identical, and for me the path of least resistance was to simply cancel the original (incomplete) subscription and create a new one if the user enters a coupon code. Creating a subscription with the coupon code or promotion code at the outset works as intended.