My understanding is that XEN is a three-tier system:
1 x hypervisor -- manages CPU, ram, interrupts
1 x dom0 -- contains device drivers and admin apps
n x domU -- guest VMs
The dom0 impl therefore provides services (esp devices) to guests while using services provided by the hypervisor.
KVM is a two-tier system, collapsing the hypervisor and dom0 into one layer.
The advantages of the Xen approach appear to be:
1) critical hypervisor code is small, so more easily ported and audited
2) possible to use same hypervisor with different dom0 impls, eg windows/bsd/solaris as dom0.
3) this is the traditional approach, hence more research/experience
4) reduces changes needed to an OS to make it a dom0, as some of the virtualization-specific logic is in a separate layer. In particular, one article implied that KVM would have to rework the standard linux scheduler implementation to get good scheduling for guests. I guess this means that xen does at least some scheduling decisions in the hypervisor.
It seems that (4) isn't working out so well in practice though.
The recent suggestion to put a hypervisor implementation into the kernel git tree does seem interesting. AIUI, the suggestion is not to collapse the layers KVM-style; building the kernel would also generate a separate hypervisor image. However because (linux-hypervisor, linux-kernel) are always released as a pair there is no ABI issue. The downside is that no other dom0 implementation would run on that hypervisor, so
(a) XenSource would presumably have to maintain two similar-but-not-identical hypervisor implementations,
(b) If someone upgrades their linux kernel, they also need to upgrade the hypervisor to match.
(c) If someone switchs to a different dom0 (eg windows) they need to change hypervisor to match.
Presumably (b) and (c) sink any idea of putting the hypervisor into ROM. And just the idea of modifying the hypervisor in sync with linux changes means that the "auditability" benefit of a hypervisor is mostly lost: it's expensive to "recertify" a hypervisor impl that changes every 6 months.
I'm no expert on this, so all corrections welcome!