The Xilinx tools, by default, will only optimize things enough to make the design meet all the requirements. In addition, some of the later tools throw in some randomization to search for different (and possibly better) designs. These two together can cause designs that aren't fully utilized to swing quite a bit in slice count, timing, etc.