I think I'd be inclined to do it the following way to keep it a little more commodity distribution based. KVM and btrfs.
1) snapshot the running server.
2) copy snapshoted image and start it up as a new running instance
3) upgrade new instance
4) verify instance
5) restart original server point at new instance image.
5.a) maybe shut down original instance and rsync data directories over
5.b) maybe copy new image over onto original image.
I'm sure a decent portion of this could be scriptable as well. Anyway, just my two cents. This is similar to what I do now, except a number of things have to be shut down before the image can be made. btrfs and snapshots seem like it would be good to take a snapshot of an image while at rest to make sure there aren't corruption issues, without the need for all of that extra space.