Well, about 1% thermal shrinkage is reasonable, so that brings a freshly solidified '110mm' object down to about 109mm at room temp. Something else is going on if you've got 106.
Have you changed the steps-per-mm at any point? Your difference between small and large dimensions looks like a fixed error has been cancelled out with a proportional solution - e.g. outer layer thickness a bit more than the slicer setting, mechanical backlash (there will always be a little bit!), under- or over-extrusion, etc. Note also that a good-looking, sticky, well-filled and reliable print might not always mean the most dimensionally accurate one.
Consider calibrating anything proportional (e.g. steps-per-mm) to a large (100mm?) object (assuming the steppers are well-tuned, and the print isn't trying to run too fast), and see whether it improves. The small objects might be a little less accurate though, as the natural fixed error you have will be back and rather big-looking at that level.
If it was me, I'd be making a big version of the bottom layer of that pyramid (20 steps or so) and making a chart to see what the fixed/proportional/random components of my error were in x/y, and whether they were the same or different, to round down where the problem is likely to be...
SD3. Mk2b + glass, heated enclosure, GT2 belts, direct drive y shaft, linear bearings, bowden-feed E3D v5 w/ 0.9° stepper
Smoothieboard via Octoprint on RPi