When you're synchronizing from network, you're most likely limited by the rate of fetching blocks. When you're reindexing blocks that are already present on disk, only CPU is the bottleneck.
The algorithm to decide where and when to request blocks is relatively stupid, slow, and easy to confuse. This is why during synchronization from network, you rarely use all bandwidth available. This is being worked on, but it's not a simple problem, if you want to avoid many problematic edge cases. EDIT: bandwidth usage should be a lot better since Bitcoin Core v0.10.
When reindexing block on disk, the reference client will by default use all CPU cores available, to speed up the process. You can put par=1 in bitcoin.conf to restrict the validation operation to a single core. As of 0.9 (not yet released), you'll also be able to change this value in the GUI configuration.
Thanks Pieter, I only have a peers and dat file in application support? Where is this config file to found - I am assuming I'll know where to add par=1 as there will be a par value and text edit will do this? cheers – bard – 2014-02-09T14:41:39.930
It's in the data directory (the same directory that holds peers.dat, wallet.dat, blocks/, chainstate/, ...). If it doesn't exist yet, you can create it using a text editor. – Pieter Wuille – 2014-02-09T15:16:57.437