I have been fighting with this problem for more than a year.
I cut out small bowl shapes. They are two sided.
I use fusion 360 and I measure the stock with a caliper.
(Ive tried multiple calipers to make sure they were accurate.)
I checked the square of the table using what I believe is called the 3,4,5 method.
It is perfectly square and I also notice that when the machine is homed, both sides of the X are perfectly lined up with the Y rails.
I have surfaced the waste board and then cut an L square so that when I place the stock, it would line up with the square of the cutter. I cut 3 extra 1/4" holes in various places, all the way through so that when I flip the stock, the first thing I do is try to drill in those same holes and see how off it is.
Unlike the person above, I do flip it the correct way. It is ALWAYS off diagonally by some small amount. The OF cuts perfectly on one side, but after the 2nd side is cut, when looking down on my bowls, one side is thicker than the other. Instead of just cutting one or two at a time, I tried cutting 10 and gave up since half of them had their sides cut into. I tried using the dowl pin method somewhere
along the way but had problems with it. Guess I have to try that again.
Very very frustrating.
You mention having checked everything for square. Have you also checked to be sure that your X- and Y- axis travel distances are both precisely as programmed? Ball screws do have a non-zero lead tolerance. If one or both travel distances are off by a little, referencing from the opposite edge of the workpiece would still make you miss your original hole, even if your axes are square and your workpiece perimeter is precise.
There are quite a few videos on how to do this. I’d recommend watching a couple of the more popular ones for the one that you feel most comfortable following.
I did that, but for longer distances I used a different method.
I made a holder for a sewing needle that I put in the collet (you could also use an end mill with the most extreme point you have), and used a pieces of cardboard taped to the spoil board 60 cm apart along the X and Y axes.
I lowered the needle until it just put a tiny hole in the first cardboard/tape and zeroed it. Then using MDI moved the router/pin 60 cm along the axis I was calibrating then lowered the Z axis to put a second small hole in the next tape/cardboard.
I measured the distance between the two holes and did any needed math to alter the steps/revolution.
My Masso G3 controller has a method to do this calibration but I also did the math on my own as well.
SInce you’re already drilling 1/4” holes, I’d be inclined to insert 1/4” precision dowel pins into the holes, and then measure across the pins with your calipers. Just subtract the pin diameter from your mesurement, and you have the true center-center distance. If you don’t have dowel pins handy, you could use a couple of router-bit shanks or the like, but I’d check double-check the diameter on those.
I’ve only done a rough check of my new journeyman so far, and I used a Woodpeckers 48” rule and a centering bit for that. Before doing final calibration, I plan to do some searching myself, as @DavZell suggested.