It 
might just be a refresh rate bug.
Adjust your refresh rates and it might work.
The following is from TweakGuides.com regarding BF2:
	
	
		
		
			Launching/Loading Issues: The most common problem with BF2 is that the game crashes to desktop or goes to a black screen when you first launch it. The reason for this is either incompatible hardware (make sure you meet all the minimum specs), or more usually the fact that you're not running at the default Windows XP refresh rate (60Hz). By default the game tries to launch at 800x600@60Hz initially, so your system must be able to run that same resolution and refresh rate, otherwise the game will abort. If you are using any refresh rate override program/method, disable it (e.g. if you're using Refresh Force, click the 'Restore Original Settings' button and apply). Alternatively, see the Advanced Tweaking section of the guide for details on how to set a different startup resolution, in case your graphics card/monitor simply cannot do 800x600@60Hz resolution. Once you've got the game running, you can then change the resolution to suit your taste in the in-game settings, and importantly you can select a higher refresh rate. Then you can reapply any refresh rate override and the game will launch without any problems. To set a non-standard resolution see the Advanced Tweaking section.
		
		
	 
Also from TweakGuides.com ...
Video.con
VideoSettings.setResolution 1280x960@75Hz
This setting controls your current resolution in Battlefield 2. The format is Width x Height@Refresh Rate. If you cannot start up BF2 and change the resolution from within the game, try altering it here to help you startup the game. In particular when you want to launch BF2 for the first time and the game just crashes back to desktop (See Troubleshooting Tips section), you can change the resolution from its default of 800x600@60Hz to one your monitor supports. Note however that certain resolutions are unsupported and entering them here will not work - see the Command Line section further below.
And keep in mind that BF2 uses two folders to finally access the in-game multi-player lobby where you can browse the servers and select one to play on and such.
It first uses the Video.con file under the "Default" folder (which is located within the "Profiles" folder) to launch the game (usually at 800x600 at 60hz), and then after you log-in it will use the Video.con file located in the "0001" folder (names can change for that folder, it could be 0002 for example), again under the "Profiles" folder, to finally arrive at the main menus.
So if it crashes once you arrive at the multi-player lobby then it's probably a refresh rate problem. If not then it's probably because the game isn't stable enough under Vista because it's new.
If you're using a GPU from ATi then you could always give a try to the newly released final version of Catalyst 7.1 for Vista, good for both 32-Bit and 64-Bit.