I haven't managed to defragment with the default tool, either.
It could be too little (< 15% is getting bad) freespace, or files that actually depend on a specific position on the disk, or both, or ...
MyDefrag does a really good job. To prep for a good defrag, and your first will take a long time so might as well do some prep, shut down every app and speedlauncher and background updater and whatnot you care to hunt down, clean out the temp directories with ccleaner and (this step can matter _a lot_) delete the file-update-notification journal by running
fsutil usn deletejournal /n c:
(or whatever disk) from the command line. The command works on XP too. Assuming space is low, make more room (and speed it up dramatically, scratch space is important), by temporarily turning paging and hibernation off.
Then run mydefrag's monthly reorg script. It will take a long time. It sorts the whole disk, every movable file by various priorities right down to alphabetizing them. On an older laptop drive it might take all night, but the first time I ran it it eliminated more than half of Orbiter's cold-startup time. After about every six months my stepdaughter's computer has bogged down to an utter crawl; ccleaner and a mydefrag script perks it right up again.
When it's done, turn on paging and hibernation again, and if you use indexing on that volume recreate the usn journal with fsutil usn createjournal m=67108864 a=8388608 C: (if you don't know any reason to use different numbers those work for me, you could probably divide by 8 but I've never seen any reason to experiment). I've seen systems with ridiculous journal settings, producing hundreds of unmovable fragments scattered all over the drive.
HTH,
Jim