I wonder if writing and rewriting the files is hurting you. Here's an untested simplification of the relevant section of your code:
while(my $file = ( <C:/data/*.log>, C<:/data/*.stderr> ))
{
# add all log files to zip file
$file =~ s/C.*\///;
$zip->addFile( $file );
}
$zip->writeToFileNamed( $logname );
This'll only write the zip file once for each subroutine invocation. It may trade memory for speed, but I'm not sure how Archive::Zip handles open zip files internally, so it may be a moot point.