I know this question is a little old but I'm going to reply anyway. When I built my app to automate VM builds, I was always frustrated because I couldn't find examples in C#. I believe your issue is one of two things: No device key or the way you are initializing some of the objects. I will past some of my code which works below:
VirtualMachineBootOptionsBootableEthernetDevice bootEthernet = new VirtualMachineBootOptionsBootableEthernetDevice();
bootEthernet.DeviceKey = 0;
VirtualMachineBootOptionsBootableDiskDevice bootDisk = new VirtualMachineBootOptionsBootableDiskDevice();
bootDisk.DeviceKey = 1;
VirtualMachineBootOptionsBootableDevice[] bootDevices = new VirtualMachineBootOptionsBootableDevice[] { bootEthernet, bootDisk };
VirtualMachineBootOptions bootOptions = new VirtualMachineBootOptions();
bootOptions.BootOrder = bootDevices;
bootOptions.BootDelay = 10000;
bootOptions.BootRetryEnabled = true;
bootOptions.BootRetryDelay = 5000;
cSpec.BootOptions = bootOptions;