The forking in windows does not actually fork processes, it is an implementation of threading. And as most know, threading is experimental in Perl and definatly not stable.
I have tried a couple "forking" excercises in Windows and have never gotten consistant results. There are other workarounds, but I don't have them off the top of my head. Other monks may have options for you.
This has been one of my main "Perl with Win32" beefs as well.
Sorry I couldn't be more helpful than explaining why it has odd behavior.
Update: For external applications look into
Win32::Process and
Win32::IProcess (the only place I can now find the latter). Both are handy for dealing with processes and spawning new processes in Win32.
"Nothing is sure but death and taxes" I say combine the two and its death to all taxes!