I had a look at download.php and i can see a few places where the time limit is reset. I havent looked into what that actually does, but if one is being set to 300 and one to 30, I would just change both to something bigger and see if that helps ;) I take no responsibility for this suggestion. It is just what I will probably try first when I have the same problem. Does it seem to reset around 30 seconds ??
// imitate fseek for remote files
@set_time_limit(300);
// reset time limit for big files @set_time_limit(30);
Also just generally when these sort of problems happen it is good to check with your hosting company some of the PHP configuration settings.
Some of the settings that might be having an effect:
max_execution_time
max_input_time
memory_limit
upload_max_filesize
post_max_size
the guys on this forum actually go through those limits in detail.
http://sonyjxx.membres.jexiste.org/phpbb/viewtopic.php?t=3424