doFill is designed to simulate the filling if false rather than actually doing it. Look at how the IFluidHandler.fill works. It is done in the same manner allowing for another class to call it and insert false for fill to see how much fluid it can take. Very useful in several cases where you don't want to actual fill something but rather calculate the filling volume for several objects. In my case this would be were i sum up the amount of fill-able volume for a large area.

canFill is designed to check if the block can be filled at all and should only return true/false without checking if the block even has space for fluid to fill. This way a basic check can be done on the block too see if more calculation can be done.