In an average song there are points that require high quality and points that require low quality (i.e. silence).
Instead of having the whole file at, say, 160kbps CBR (Constant Bit Rate), we can use VBR (Variable Bit Rate). This allows us to have use low bitrates at points that does not require high quality (were a higher bitrate would not affect the sound heard) and high bitrates when needed. The result is usually a smaller MP3 file, with higher quality.
Unfortunately, the many MP3 decoders estimate the time of a MP3 file based on the first bitrate they find and the filesize. This means that the "prediction" used by such decoders is wildly wrong with VBR encoded files and, as a result, you can get fairly random times for such songs.
As most songs start with silence you usually get the song length being shown as much longer than it should be. Also when you jump through a file encoded in VBR, 50% through the file is usually not 50% through the song.
A VBR null frame is placed at the beginning of the file to tell the MP3 player information about the song length and indexing through the song.
The problem arises because some poor encoders don't produce this null frame or do so incorrectly and this is what vbrfix attempts to fix.
Vbrfix can also fix other problems with MP3s as it deletes all non-MP3 content (you can keep tags that you state, though). It can also help when merging two VBR MP3s together with a merging tool and then needing a newly calculated VBR null frame.