I don't know that I have any real answers for you, but I have some observations that I hope may help.
Sometimes when mplayer has been paused and then told to continue playback, there can be a surprising delay before it actually continues playback. This seems to be especially true as far as the sound is concerned. If playback was paused at an area of a video where the video doesn't change much for a time, but there should be sound, it seems that the video playback has actually continued, but the sound takes notably longer to continue ( yes, even if no delay was manually set between video and audio, via the User Interface ). This all can make it seem as if playback has not continued, even when it has actually continued. So I have to be very patient waiting for both video and audio to verify make sure playback hasn't continued, otherwise my attempts at re-starting playback will get out of sync with what mplayer is actually doing.
Also, sometimes it seems as if some options related to timing/indexing, can help maintain control, for example, -idx.
Finally, I'm not entirely sure if there was some earlier code that became difficult to maintain, or what the reason is, but these days there seems to be an mplayer and an mplayer2. By default, it appears they are built with different capabilities. When I have the time, I'll look into a custom build of mplayer2, to see about making sure all the capabilities of the earlier mplayer are available. But for now, I seem to need both around, to have the full range of capabilities. Although to me it can seem somewhat annoying to have the OSD ( On Screen Display ) active all the time, the "playback counter" can sometimes give a handy indication of whether or not playback has really continued. So I'll sometimes enable it, before I pause playback.
With all this, I seem to be able to manage fairly well, most of the time. So I haven't tried to troubleshoot the situation. But I suppose it's possible, especially when mplayer is paused for quite a while, that the mplayer process is just paged/suspended/etc., since it was inactive, and it just takes the OS a while to start mplayer running again.