I got a similar setup to work. The problem seems to be this:
Suppose we have three partitions:
1. Old windows partition (XP or so)
2. Windows Vista
3. Fedora or other linux distro using GRUB
Assuming you had partition 1 installed already, during installation of partition 2, Vista will modify the bootsector of 1 to point to the new boot program (BOOTMGR) which it will also install in partition 1, replacing NTLDR (although the NTLDR files will remain on the partition). From that new boot program it will boot the Vista installation on partition 2.
If you install some linux next (or did so earlier, found your GRUB menu gone and reinstalled GRUB), you can still use the GRUB entry pointing to the old Windows. But when you create another similar entry (in /boot/grub/menu.lst) to point to partition 2 to start Vista, GRUB will try to indeed boot partition 2 which won't work since Vista did not install its boot program there.
This is roughly how I got around it:
Make sure GRUB is installed on the linux partition (3) (which is the most common setup anyway, I think).
Boot into 1, the old Windows. From here you need to configure partition 2 to boot Vista itself.
Take the following steps:
1. Configure partition 2 to use BOOTMGR, which is done like this:
1.1 Figure out under what driveletter partition 2 is mounted under the old Windows. I'll assume for now it's D:
1.2 Start from a command prompt the program BOOTSECT.EXE like this: BOOTSECT /nt60 D: <Enter> (replace D: with whatever driveletter you found in 1.1). The program BOOTSECT can be found on your Vista installation DVD.
2. Copy the BOOTMGR file to the root of partition 2 (this file can be found on your Vista installation CD)
3. Use BCDEDIT.EXE to setup a BCD (Boot Configuration Database?) on partition 2. This would at least involve a /CREATESTORE and /CREATE action, see BCDEDIT /HELP for details. If you cannot boot your Vista partition anymore, using BCDEDIT could get very tricky. Try using the Vista installation DVD recovery option to fix this then, it should detect a "missing" Vista installation and fix the BCD entry.
4. (Optional) Boot into Vista and run BOOTSECT /nt52 D: <Enter> (replace D: with whatever drive your old Windows sits in now) to use good old NTLDR again on your old Windows partition
5. If you didn't do so already, boot into linux and modify /boot/grub/menu.lst to show an extra entry pointing to the Vista partition. Something like this:
title Windows Vista
root (hd0, 1)
chainloader +1
Hopefully this helps.
Regards,
Martin