I used reflector to check out the code in the setvm cmdlet and it appears that it uses an object that fulfills the VIAutomation contract (interface) which contains a VMService. It then calls updateVM to apply the snapshot.
Anyone know how to get an instance of the VIAutomation contract? Would save me a bunch of time if so, thanks again!