This is an issue we have to be aware of as we are a payroll provider!
It's slightly easier for us in that there is never usually a situation to change a payment value of 0.00 to be null, the only example i can see of this is if the user wants to not only zero the payment for this period but also remove the payment item from the employee in question.
In all other occasions it is more common to have a value in a payment that you want to set to zero, or have a zero (null) you want to set a value to. This is obviously easy to spot using a "preScreen" / "postScreen" style comparison of the text box and data.
Generally, we opt to store values which could be either zero or null (and to mean different things), by storing as a String as BeeJay suggested. We have also in the past (Where it is appropriate) cheated and add a checkBox next to the text box which is selected when the item wants to be removed and not just set to zero... That's obviously not the most user-friendly way of handling it but in some cases it works more neatly than essentially guessing what the user meant.
Rich