An alternative to this would be fetchmail and maildrop. The MTA (fetchmail) downloads the messages periodically and delivers them to the MDA (maildrop) which can store them in Maildir format (each mail is an individual file). Fetchmail actually has weird bugs with some mails, so I made my own version in Perl, but there's other options out there.
2. fetchlimit was set to be less than the number of messages in the remote mailbox, and
3. The remote mailbox stayed above this limit,
then you would find yourself in a state where fetchmail would say that it had fetched everything while there were unread messages that it would never look at.
Looking for a bug report just now, I didn't see anything that matched this.
I don't know about lost messages, but it used to bomb out on spam, but still deliver the messages up to the spam. So I would wake up with 5,000 duplicate messages and a lot that were never gotten, and i'd have to use a client to delete whatever seemed like the "bad" message until fetchmail could continue delivering mail and finally delete the old ones.
To solve it I did what any bored Perl programmer would do - write my own fetchmail program in a couple hours in Perl. It solved my issues and i've been using it ever since. Years later it took me about an hour to add SSL IMAP support so I could use it on Gmail and Exchange.
Alternatives: http://imapsync.lamiral.info/ http://offlineimap.org/ http://isync.sourceforge.net/