Cheap CNC strange offsets

Just setup my cheap old chinese carving machine that I modded from a engraving kit off of eBay.
The machine is working well, very balanced and stable, but it seems to have some strange offsets when it comes to the cuts. The machine uses T8 rods in all 3 directions.

I just did a testcut from Easel that is 40x40mm external and 20x20mm internal.


In the X direction the external measurement is 40mm, but the internal is 19.8mm
In the Y direction the external measurement is 39.9mm but the internal is 20mm
This seems very strange to me. It’s cut at 200mm/min, so quite slow, with a 4mm carbide bit.
Any advice?

My machine settings:
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=6 (dir port invert mask:00000110)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.001 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=25.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=400.000 (x, step/mm)
$101=400.000 (y, step/mm)
$102=400.000 (z, step/mm)
$110=500.000 (x max rate, mm/min)
$111=500.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)
$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=250.000 (x max travel, mm)
$131=250.000 (y max travel, mm)
$132=200.000 (z max travel, mm)