DUE giorni di debugging....
Allora, la questione sta in questi termini.
IE fa casino con le cache nel momento in cui fai session_start se poi dichiari certi headers.
Così funziona:

session_start();
header("Content-disposition: attachment; filename=$flName");
header("Content-type: application/octetstream");
header("Pragma: no-cache");
header("Pragma: public");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Expires: 0");
$size = filesize("$file");
header("Content-Length: $size");
$hdl = fopen($file , "r");
fpassthru($hdl);
exit;

[ Ovviamente $flName e $file te li calcoli da qualche parte. ]
Quindi, oltre a dover dichiarare in un certo modo gli headers per la cache, non puoi (non chiedetemi perchè) servire il file con

readfile($file);

Come facevo nella prima versione (che funziona regolarmente per tutti i browser ma non per IE) ma devi farlo con

$hdl = fopen($file , "r");
fpassthru($hdl);

... Se fate qualche ricerchina in giro, trovate decine di post di persone che hanno avuto questo problema....