It appears to be a long-standing bug in roAudioPlayer. I've played around with various workarounds. What I'm currently doing is when I get the audio player's IsStreamStarted event, Pause then Resume the audio player, giving it a little Sleep time to think about it. It seems to work about 98% of the time. Something like this:
Sleep (350)
audio.Pause ()
Sleep (350)
audio.Resume ()
It doesn't seem very effective on the 3.1 firmware though. It still takes a while to buffer in that case. However, I'll change the text on the roSpringboardScreen's Play/Pause/Resume button to display a percentage showing how much buffering has been done, in response to the IsStatusMessage "startup progress" message so the user knows something is really happening (albeit slowly) rather than the channel having hung. I know this works on the Roku 2XS. I don't have a Roku 3, so I've no idea how it works (or if it's necessary) on that unit.