The reason for this is that mIRC uses the Windows MCI functions to play sound files and unfortunately they return an incorrect length value for MP3s that use VBR. The $sound() identifier uses its own methods to determine the properties of an MP3 file.

The /splay command and the $inwave, $inmidi and $insong identifiers use the MCI functions to set and determine .pos and .length as Windows MCI sees them. So while I could change $insong.length to return the $sound().length result, it might not be usable with /splay (I haven't had a chance to test out how MCI would react in this situation).