Hi Jason,
what you have here is a display / storage mismatch.
I recommend you use StringTheory to inspect the RAM of the field at various points. (PeekRam method).
Basically you need to narrow down the scope of your problem a _lot_.
So follow the incoming text field, from the initial submission (in the web server log) to the field before it gets writeen to the table, to the field after it is loaded from the table, to the string sent to the browser to display it.
Only once you have determined where in the cycle it's being mis-encoded can you then attack the possible solutions to the problem.
cheers
Bruce