I've constructed a pretty reproducable program which gets the "free to wrong pool" error using threads and LWP::Simple.
I've used semaphores to remove concurrency, and tracked my particular problem into the vicinity of the ->request method, where I am loth to try to follow it - needless to say that's where all the complicated stuff happens. In essence, my pared-down example does nothing except fire up a bunch of threads, each of which does nothing but LWP::getstore -- posted in case anyone has any advice how to avoid the problem (while still using threads), or in case anyone needs an nice reliable example of a program that crashes.
