# telnet localhost 110
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK dovecot ready.
user $USERNAME
+OK
pass $PASSWORD
+BYE internal login failure. error report written to server log.
Solution
In /etc/dovecot.conf, check the value of first_valid_uid -- by default it is 500, meaning that users with a UID of 499 or lower can not log in.
This is a collection of techical information, much of it learned the hard way. Consider it a lab book or a /info directory. I doubt much of it will be of use to anyone else.