Virtualization adds yet another wrinkle to power-aware scheduling. The host frequently doesn't know what the VMs are doing, and you get two sets of schedulers which are hopefully using the same algorithm, and getting to the same state.
The other aspect with unexpected results is cross-scheduling tasks into a different NUMA block. The extra delay accessing non-local memory could cause the task to take longer to get to the point it can block, so putting a waiting task onto an idle CPU on a different socket compared to the last time it ran will run slowly.