Yo tengo esto por ahi y hasta ahora me ha servido para forzar la descarga de archivos, incluso aunque estos sean pesados:
$fullpath = '/ruta/a/tu/archivo.mp3';
Código PHP:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Transfer-Encoding: binary");
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($fullpath));
header("Content-Disposition: attachment; filename=" . basename($fullpath));
readfile($fullpath);
exit();
Lo que yo creo que pasa contigo, es el Content-Type que mandas. Dejale para todo tipo de archivo el application/octet-stream como Content-Type y a ver que pasa. Tambien si asi lo deseas (y parece que sería recomendable), puedes cambiar el readfile() por lo que dijo GatorV de usar fopen/fread
Saludos