I have not really noticed this myself, but then I tend to play a lot of my tunes out of a smart list I created that I have found very useful with iTunes and my iPod to play song that have not yet been played..
Simply create a new playlist and tell it to only play songs that haven't been played yet (play count = 0). Shuffle still works with this play list so when you use it you still get a random assortment of tunes, but also only the stuff you haven't heard yet (well hasn't yet been played since adding it to iTunes). Very useful for when you add new albums and songs to your iTunes and iPod as they automatically get added to this playlist.
Further more, once they get played, they no longer have a play count of zero and so no longer belong to this playlist, therefore, no repeats are possible. With the iPod/iTunes set to automatic update, when you sync you iPod to iTunes, anything you played on your iPod gets the count updated in iTunes.
If you don't normally care about play count, you could reset your whole library to have a play count of zero and your whole library will start out in this playlist. You can also modify the playlist if you do have a lot of play counts you want to keep. For example, instead of the decision being songs with a play count of zero, make it a play count of, for example, 3 or less. Now you will hear some repeats, but after the third time those song drop out of the playlist so you are not forced to hear a song for the 5th+ time.
Sorry I don't know a solution for your question with respect to your whole library, but you may find playing around with Smart Playlists might allow you a lot more control over what plays.
Patrick