Thanks for the workaround, but with a whole class of membership eligible for a discount it would take us more time to apply individual over-payments than we have saved by switching to Wild Apricot.
From the user perspective the easiest way to implement this is to add a place to put in a coupon code at renewal just as you do with an application.
A refinement (but not essential for our situation) would be to be able to specify on a coupon if it is available for application, renewal, or both.
Maybe the first step could be implemented soon to help the many who are clearly struggling with this, and the refinement could wait for more programming time to be available. Certainly, if we have to keep our current work-around (which is to create three or four more membership levels) we would have to find another membership system - it is confusing our members too much!
Thanks for your help.