What is the "one situation" it doesn't work in? Give us repro steps and we can help you. (what script? what arguments?)
...an error on that line just means that the XML parser couldn't parse the passed-in text. I've found that the easiest way to debug this type of problem is to just hack your Parser.pm file, add print $arg at line 187 just before the call to expat->parse()... so your code in Parser.pm looks like:
...that will at least print out the text that is being parsed: usually it is an apache HTML error message of some kind from the web request.
$result = $expat->parse($arg);
Our soap libs really need a debug flag to turn this kind of logging (wrap the calls to parse()) on with a flag, I just haven't gotten around to it yet. Unfortunately the perl libs are pretty low-priority as they are only generally used for dev testing and not for anything 'real' right now.
In terms of the installable soap package: no we don't have one right now. It would be nice to have one -- I've just never created one so don't immediately know what's involved. I'll look into it when I get a chance.