When a coupon is either expired or has reached it's usage limit, services that coupon is applied to cannot be modified, since the system attempts to re-apply the coupon. This seems to only occur in the admin interface. There are two cases. First when service change queuing is not enabled, the admin immediately receives an error:
That coupon does not appear to be valid.
If service change queuing is enabled then the edit will succeed, but when the cron runs to perform the service change, it returns an error:
Processing service change # resulted in status: Error
If the 'Limitations do apply to service renewals' option is selected and the limit is reached or the coupon expires, then it should continue to apply the coupon regardless.
If the 'Limitations do not apply to service renewals' option is selected and the limit is reached or the coupon expires, then either the coupon should be ignored or an error message should be shown immediately even if service change queuing is enabled.