I had code very similar to yours pieced together, and additionally modified yours to set the 'VMware.VirtualCenter.OperatingSystem' property. The workflow runs with out error, and says it successfully updated the property. Unfortunately, the property does not change on the VM. Im not sure why its not working.
In the meantime, I was able to workaround my issue by setting my workflow to run after provisioning is complete. It powers off the VM and changes the Guest OS. I have attached that workflow for anyone who is curious. Thank you for your help on this issue!