[eluser]Tobz[/eluser]
I'm having the same problem.
I've tracked down the issue to a bug in EE 2.9.0 where if exit() is ever called, a string is prepended to your output.
Something like:
Code:
{!-- ra:000000000ae5414d000000008a2c77c5 --}
since exit() is called in the force_download() method, that string is appended to the file output thus corrupting it.
As far as I can tell Ellislab has not said anything about this bug or how to fix it or even acknowledged that it exists.