The problem is that iLength ends up being some outrageous number in the billions, even though the getLength doesn’t return an error code. When I load a .it file in the playStream sample that comes with the SDK, it shows several thousand minutes left in the song.

[edit] I’ve also tried doing the FMOD_CHANNEL_CALLBACKTYPE_END callback. It works great for WAV’s and MP3’s, but is never called for a mod or s3m file, even after I set the looping to none and reset the position:
m_pMusicChannel->setMode(FMOD_LOOP_OFF);
m_pMusicChannel->setPosition(0, FMOD_TIMEUNIT_MS);