I wonder if the issue is that the dom0 is single threaded, serializing all the IO.
Have you done dd bs=1m from the dom0 raw disk, the dom0 backing file, and the domU ('raw disk')? I used to see X, 0.9X, and (0.9)^2 X, ish, on somewhat old Xen and older NetBSD. I would run "systat vmstat" in the domU, to see the disk busy fraction and transfer rate. I also wonder if there is some sort of fsync in the domU leading to virtual FUA leading to fsync in the dom0 going on.