ROCK!
I had gotten as far as the "three separate commands" solution. (flite -> rateconv -> pcmplay.) I hadn't thought of a fifo -> pcmplay solution. I was thinking that it'd be nice if Flite could be patched to write directly to the empeg's sound device after the sound is up-sampled, but that's probably a bigger step.
It sounds like what you've got might work pretty well. I'm curious, does it work when the player app is running? I know there is/was a kernel hack to do sound overlay, and I thought it might have been incorporated into Hijack. That'd be really sweet. Then GPSapp could read directions, for instance.
Also, how is the memory usage? Can you run Flite without swap while the player is running? I was having problems with it when I tried back in the Flite 1.0 days.