Finally found the solution,
Running 'dovecot -n' gives the configuration that dovecot will be running with after all the config files are combined. I had all my configuration options for passdb and userdb in my dovecot.conf, but I didn't realize these options were also defined in files in the /etc/dovecot/conf.d directory. Upon investigation I found a conflicting userdb directive, and upon removal things became sane.
Hope this helps someone in the future.