The way memory works is it clocks down to the speed of your system. The name the vendor gives it refers to the maximum speed it can do. But if you stick fast memory into a system with a slow FSB, the memory will be running at the slow speed of the FSB.
For example, memory that's called DDR2 800 can do a maximum speed of DDR 800, which corresponds to an FSB of 400 (DDR and DDR2 memory are double-pumped, which means they transfer data twice per cycle, which is why DDR speeds are reported as double the clockrate of the memory... FSB of 400 = memory clockspeed of 400 MHz = DDR 800, FSB of 266 = DDR 533, etc.). But if you stick that DDR2 800 into a stock Core 2 Duo system which has a 266 FSB, that memory will be running at DDR 533 speed. So to run a Core 2 Duo at stock settings, all you need is DDR2 533.
Now, if you wanted to overclock your Core 2 Duo up to a 333 FSB, for example, then your memory would be clocked to DDR 667 speeds. So you'd need to have memory that could do that speed. DDR2 800 memory allows you to overclock your system to 400 FSB.
There's also another thing called a memory multiplier -- it allows you to run your memory at a different speed than the FSB, instead of 1:1. That's called running the memory asynchronously. For example, your mobo might let you run the memory at a 5:4 ratio, meaning at stock speeds your FSB would be 266 but the memory would be running at 333 MHz which translates to DDR2 667 speed. 3:2 ratio allows DDR2 800 speed at stock 266 FSB. You get the idea.
Hope that helps.