I assume that somewhere, something is in an encoding, and something tries to decode that in the wrong way. Maybe the data is marked as UTF-8, but sent as "something else". Can you take mod_perl/Apache::Registry out of the picture, or is it not in the picture at all?

As a second stab, I would try to look at the data going back and forth either with Wireshark or with SOAP::Trace to get a better picture of what might happen when.

Also see this (somewhat disheartening) part in the "Troubleshooting" section of SOAP::Lite:

I've been dealing with SOAP for a while already and I must say that the module you should use is XML::Compile::SOAP. Or, if possible, SOAP::Simple (which is just an abstraction for it). If you want to make a web app with support for web services, I'd recommend using Catalyst with Catalyst::Controller::SOAP. (If you're in Catalyst, you can also use Catalyst::Model::SOAP to consume web services).

SOAP::Lite is relevant in archeological terms, but it doesn't implement SOAP as it has been used in the last decade.