Level 1
As soon as I posted this I figured it out. For those wondering, I removed the v-if from the form-group div and added back the v-model. Final code:
<div class="form-group row" >
<label class="col-md-4 col-form-label text-md-right">{{__('Coupon Code')}}</label>
<div class="col-md-6">
<input type="text" class="form-control" v-model="registerForm.coupon" name="coupon" :class="{'is-invalid': registerForm.errors.has('coupon')}">
<span class="invalid-feedback" v-show="registerForm.errors.has('coupon')">
@{{ registerForm.errors.get('coupon') }}
</span>
</div>
</div>