Как известно, dovecot (да и многие другие сервисы) весьма чувствительны к точному времени. В частности, если ntpd начинает переводить стрелки, dovecot тут же умирает с воплями 'time went backward'.Главная проблема заключается в том, что при загрузке FreeBSD система rc-скриптов задает очередность запуска демонов, но не гарантирует, что к моменту запуска последующего демона предыдущий выйдет на штатный режим. В частности, ntpd честно запускается ранее, чем dovecot, но далеко не всегда успевает выставить время. Обычно, ко времени запуска довекота, он даже не успевает со всеми серверами из пула пообщаться. Как результат - переводить стрелки ntpd начинает тогда, когда dovecot уже вовсю работает. Итог понятен.
Поскольку проблема заключена не в ntpd или dovecot, а в rc-скриптах, решение сделано средствами rc-скриптов:
-------------------8<-----------------------------
#!/bin/sh
#
# PROVIDE: ntpwait
# REQUIRE: ntpd
# BEFORE: LOGIN
# Place that file into /usr/local/etc/rc.d/ntpwait.sh
# Extension '.sh' is mandatory
# Add 'ntpwait_enable="YES"' to the /etc/rc.conf
# Add 'ntpwait_flags="120"' to set delay in seconds
. /etc/rc.subr
name="ntpwait"
rcvar=`set_rcvar`
command="/bin/sleep"
: ${ntpwait_flags="30"}
load_rc_config $name
run_rc_command "$1"
#
-------------------8<-----------------------------
Данный скрипт приостанавливает запуск прочих rc-скриптов сразу после запуска ntpd, чтобы дать ему время отчехлиться. Если дефолтных 30 сек вам покажется мало, можете флагами задать нужное время.
Еще раз обращаю внимание: файл скрипта должен иметь расширение .sh, хотя большинство скриптов, там лежащих, его не имеют. Так надо.