Sending files over usually involves setting or manipulating the content-disposition header. I would first start there ensuring that its set, set correctly and that it gets set correctly with each file request (ensuring there are no caching issues with vars under mod_perl).
After that I would say, imho, that if you are getting the save as dialog and not the browser displaying directly then frankly you have succeeded. Its upto the client, not the server, how the client deals with the data it requests.