Fyi, the link to timekeeping in FreeBSD is in a language other than English. Not sure whether it's German or Dutch, but I can't read it.
I doubt that you identified the root cause of the problem, even when your fix apparently works.There are many potential problems with timekeeping on virtual machines, most of which are covered in this excellent document. You can find more FreeBSD specific information here.The error message you saw is pointing towards the local APIC calibration going wrong. This in turn may be influenced by the VM configuration, but depending on the CPU pressure on your host, this problem may turn up anyway.I think (i.e. do not know for sure) that NTPD also does some basic checking if the local timekeeping is sane. If it decides that it is not, it will exit / not synchronize.The are other threads suggesting that for FreeBSD, you can manually set which clock source(s) are used by changing kern.timecounter.hardware to something more reliable from the range of kern.timecounter.choice. Probably, in a situation when ntpd works for you, the kernel has already decided for a better clock source which you could set in tuneables, thus potentially avoiding the need for a virtualized network adapter. You can also lower the virtual overhead by setting kern.hz=100.