I've had really weird problems with open3, trying to write a wrapper for megahal. I ended up having to use open2() and just ignore stderr altogether, otherwise megahal would eventually just sieze up on me.
The only thing I could think of is that IPC::Open3 isn't cooking things correctly.
Comment on Re: Open3 in child process not capturing errors correctly. .