in reply to Error output to screen

It's good that you are testing the return values of each call, and dying when a critical error occurs is generally a good idea. But in this case you don't want to actually die, as this also prints to STDERR - you just want to exit. For example,
eval { copy($fileOne,$fileTwo) or die "Failed to copy $fileOne to $fileTw +o - $!"; }; if ($@) { # Record the log information in here exit 1; }
My personal preference when developing on windows nt/xp systems is to use the event log instead of a log file. I have had good luck with Win32::EventLog::Carp.