All the defrag programs look good, but I wasn't wanting to pay anything for this, and I didn't have a external drive I could back up to. So what I did instead was to zip up all the data files I had on the laptop (ie everything other than programs) then I copied them to a desktop. This took me from about 35GB free to over 90GB free space on the drive.
The boot camp utility was then able to properly format the 15GB partition I wanted. And then I copied everything back. I'm not entirely sure how boot camp partitions drives, whether it is in contiguous blocks or not, so this may work all the time, or perhaps not.