Servlet containers are tricky places: there is more than one ClassLoader in use, and seemingly weird things happen if the same class gets loaded by two different ClassLoaders. It's possible that this is what's happened here.
You might try logging the result of "method.getDeclaringClass().getClassLoader() == obj.getClass().getClassLoader()". You'd like this to be true. If it's false, then that explains your problem.
Thanks, Earnest. Thought I was loosing my head. I rewrote the servlet call to work directly with the MirrorMaker class and found that I did indeed have a class loading issue, mainly a lingering .jar file in my WEB-INF/lib dir. I haven't put it back to how it was yet, I'll try it later, but, by removing it from the lib things are doing ok.