Just adding to this issue. Been doing some tests with my TAZ5 using a .6mm Volcano Nozzle, ABS.
I made a test cube, 20mm x 20mm x 5mm high.
Inside this cube I made a 5mm square hole, and next to it a 5mm diameter hole.
I purposely set the extruder to over-extrude a bit, and also started a print a little too high off the bed. Why? So that the holes would be cone shaped - not in G code, but because of the nozzle. A slight over extrude, and a starting the print a hair too high off the bed would make the holes wider at the bottom (not flattening out against the bed as much) and narrower at the top (over extruding on the top few layers will cause some "smushing")
Printed, the 20mm x 20mm square, external dimensions:
Very bottom layer: 19.84mm
Top layer: 20.6mm
The over extrusion caused the outside to be .76mm wider at the top than at the bottom.
Square hole, bottom: 4.88mm
Square hole, top: 4.2mm
A difference of .67mm, same as the outer edge (. That looks perfectly correct.
Now, the circle:
Circle, bottom: 4.65mm
Circle, top: 3.8mm
A difference of .85mm between the top and bottom.
What does this show? Two things:
First, I believe if you are having a hole size issue with squares, you're over extruding. My outer size was .16mm smaller than it should have been at the bottom, and .6mm larger at the top. My inner square was .12mm smaller at the bottom, and .8mm smaller at the top. Which is almost exactly the same dimensions off as the outside measurements. Getting starting height and extrusion correct should fix that.
Now the circle on the other hand - the circle suffers from the fact that when going in an arc, more filament is extruded on the inside half of the circle than the outside half. It's explained here: http://reprap.org/wiki/ArcCompensation
At the bottom of the square the circle is 4.65mm wide, off by .35mm. The outside of the square was slightly undersized (.08%). The inner square hole was nearly perfectly sized, and offset by almost the same exact size as the outside of the square. But the circle is off by about 3x the undersize of the entire thing (.12 x 3 = .36). This is due to more material 'bunching up' on the inside of the arc.
Imagine your filament is like a balloon used for balloon animals. On a straight line it looks like this:
The balloon is evenly colored/stretched out across it's length.
But when you bend it in an arc, it looks like this (it's not the best example but the best I could find on a quick google search):
Look at the blue side loops. The inside of the loop is darker, and it even buckles in one spot because it's 'bunched up'. Since it's rubber it just bends, and the outer edge stretches. With extruded filament, all that 'extra' on the inside just piles up on itself, and spreads out. Causing the hole to be smaller.
It's even worse at the top of the hole where we're really over extruding. The inner diameter is 3.8mm, an entire 1.2mm too small, and no surprise, it's about 3.5x the undersize of the bottom diameter. The problem is clearly visible when not over extruding too much (bottom later starting high, not 'smushed' against the bed), but when really over extruding the problem is massive.
So yes, over extrusion is an issue. But an even bigger issue is any inner arc, be it a circle, the corners of a triangle, etc. The extra plastic piles up and spreads out where there is the least amount of resistance: The inside of the hole.
There is math out there that helps with the arc compensation. Would be awesome if simplify3d could make use of it. I REALLY don't want to try and program that in the firmware