I have an alternative take on this problem:
I have just bought a Classic 160 Gb at Amazon few weeks ago and I have been facing the same issues as you.
I do not use Mac OS X, nor iTunes to sync. I run Linux and I use Media Monkey on a Windows VirtualBox Machine.
During the past two weeks I have tried everything that I could find. iTunes have not even been able to read my entire collection (strange, right?)
My findings
I have just restored the iPod firmware a few minutes ago. Started MediaMonkey and sync'd 10 songs from an ordinary random artist. Disconnected and the songs were there, nice. So the iPod is actually working. So far, so good, I have figured that out before.
However, in the meantime, while I was checking my library, I recalled that I have some songs from Japanese bands with Japanese characters in their names. Historically, this would be very error prone. So I did gave it a try, and sync'd 64 songs from that band. Disconnected the iPod and the songs were all gone.
So apparently the 2.0.4 firmware does not handle these characters very well. Check your library, make smaller tests. I am about to restore the iPod again and will try to sync some more files with normal ASCII characters. Will update you.
My old, now dead (waiting for a new disk), iPod, running 1.0.2 was able to hold those files nicely.
It will work as you expect. However, a work around for first-track-will-be-played-most when using album shuffle is to have one or more intermediate playlists that take random samples from the library, e.g.,
Library 10 000 tracks
Playlist A selects 1 000 tracks from Library by random
Now if you play from A shuffled by album the first-track-effect will disappear. Add intermediate playlist at will (e.g., if you want all tracks played less than 5 times or so)
Best Answer
Could be drive or file damage.
I had something similar happen on my old classic. The 'fix' was to wipe & restore - which took a long time [24h maybe], but worked.
One thing I've noticed about the classic with the slide-lock switch, don't attempt to sync with it locked.