One of the primary users for checkpoint/restart is high-performance computing. You dont want to waste CPU cycles just because a node needs maintenance, so you want to checkpoint your whole computation. For very large clusters, you even want to checkpoint at regular intervals, since the probability for a node failure is just way too high.
In this situation, pure userland checkpointing is a joke. It will never be able to store the state of network communications and of the various funny things that scientific code developers can imagine.
Virtualization is not a solution either. The performance impact is too high, and youd have to plug in the hosts anyway for things like RDMA support.
This is where in-kernel checkpointing comes handy. Its not sufficient either: you need to have support in the MPI library as well, so that all processes put themselves in a consistent state to be checkpointed together.
I used to be a SuperUX sysadmin; I doubt many of you here have even heard the name, but seamless checkpoint/restart in the whole stack gives very impressive results, and in the end saves a lot of CPU cycles. There are not many systems where you can change a kernel setting and reboot, at 6PM on a Friday evening, all without the users noticing and without any doubt about causing problems during the weekend. HPC on Linux is still very, very far from this.