The simple solution is Radio buttons with a minimum/maximum payment. See this example from Chase.com's credit card payment form.
The only way I can over pay is if I intentionally choose other amount, I can just click one of the other payment options to either pay the minimum amount I can, my full statement balance, or my whole outstanding balance.
Another idea would be inline validation warning the user "You're payment is $X over what you currently owe!" This could be used in addition to the radio button scheme above.
Since this is dealing with money, and the common typos here (misplaced decimals, extra zeros or transposed numbers) can cost the user a lot of money, even if temporarily, I'd even say a modal dialog confirming "You are about to pay $X over the amount you owe, pay this amount?" wouldn't be excessive; alternately a red/error styled warning on the "confirm payment" screen (in addition to an inline warning) could be useful.
You should be very careful when letting a user enter payments, especially when it's likely they've made a mistake. The radio buttons are the simplest way, because the worst you can do is select the wrong bubble, and you can't accidentally select "Other Amount" unless you don't notice the other bubbles.