try removing
header("Content-Length: ".filesize($file));
and see if you get any different result. Then to further troubleshoot, see if you can isolate the error; start with a file that is less than 750kb (say 500kb), then test with a file that is larger, until you determine if the size is the problem.
If you have a trusted friend, see if they can get it on their system on a different computer/OS/IP address to see if your computer is the problem.
And, of course, if you have developed any other coding that DOES successfully download a 3-4MB file, try starting with it and replace with this file until you locate the problem.
Finally, if you have access to phpMyAdmin, their data dumps are 100% reliable from my experience, so I suggest you take a look a the headers they output in their coding - perhaps some of your headers are unnecessary (I'm subscribing to the thread so I can learn this too).
Samuel