The EFI partition does not need to be selected for the MBR and is usually not included in the MBR. Instead, the first partition of a hybrid MBR is a gpt protective partition of type EE. It's called a gpt protective partition because it covers the GPT partition map (which starts at block 1; block 0 is the MBR) and extends up to the start of the first real partition that is selected for the MBR. This usually covers the EFI partition (which usually starts at block 40) if the EFI partition is not listed in the MBR.
If you're not using rEFIt to boot your Mac into Windows (using Boot Camp), then it's possible the MBR did not have an active partition selected or did not have any boot code. To check the boot code, you can dump the entire contents of the MBR:
Code:
sudo dd if=/dev/disk0 count=1 skip=0 | xxd
The boot code will have strings like the following (it can change depending on which Windows or Linux utility version added the boot code):
Code:
...
0000160: 2402 c349 6e76 616c 6964 2070 6172 7469 $..Invalid parti
0000170: 7469 6f6e 2074 6162 6c65 0045 7272 6f72 tion table.Error
0000180: 206c 6f61 6469 6e67 206f 7065 7261 7469 loading operati
0000190: 6e67 2073 7973 7465 6d00 4d69 7373 696e ng system.Missin
00001a0: 6720 6f70 6572 6174 696e 6720 7379 7374 g operating syst
00001b0: 656d 0000 0063 7b9a d4e8 f7db 0000 0000 em...c{.........
...
The same command can be used to check the boot code on each of your partitions. Just change the skip number to the first block of the partition. The fdisk command will tell you which partition is the active partition (the one with the *)
Code:
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: EE 0 0 2 - 1023 162 35 [ 1 - 435548455] <Unknown ID>
*2: 0C 1023 162 36 - 1023 45 43 [ 435548456 - 2097152] Win95 FAT32L
3: 0C 1023 45 44 - 1023 234 41 [ 437645608 - 1024000] Win95 FAT32L
4: 01 1023 234 42 - 1023 44 42 [ 438669608 - 4096] DOS FAT-12
rEFIt automatically sets the boot code and the active partition when you use it to select a Windows partition to boot. iPartition can write the MBR Boot Code. fdisk -e can set the active partition flag of a partition.
These issues shouldn't happen if both partitions are visible in Windows and the GPT correctly matches those partitions in the MBR and the partition types in the MBR and the GPT correctly match their contents.