podrias empezar verificando que utilizas el MIME type correcto de output al navegador (siempre en el header), te dejo un listado de los mimetypes.
http://www.webmaster-toolkit.com/mime-types.shtml
tambien vela por pasarle el header del content lenght con la ruta exacta de la ubicacion del archivo. te dejo un listado de las cabeceras que deberias estar usando.
Código PHP:
// push file to browser
header('Content-Type: application/x-octet-stream');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="Reporte_de_pedidos'. date('Ymd') .'.csv"');
header("Content-Length: ".filesize($csvName));
// echo $csvContent;
// delete file
// unlink($csvName);
EDITADO: tambien comprueba con file_exists si dicho archivo existe en la ruta donde esperas que se encuentre. asi si no existe puedes mostrar un mensaje amigable al usuario y no darle un archivo de 0kb.
http://php.net/fileexists
aqui tu cambia tus mimetypes y referencias al archivo que deseas dar al usuario.
espero sea de tu utilidad
saludos.