What steps move circle to be tangent to another?

This is because _Trim is inaccurate. If instead you use _Split you will find the various pieces end correctly and join.

The intersection point between two circles should lie on a line between their centres. If you draw that line and compare the trimmed ends you can see how far out they are. If you compare the _Split ends you will see that they are in the right place. The implication is that _Trim uses a different algorithm to _Split. That seems like a bad idea…

Note that, disappointingly, this _Trim bug still exists in Rhino 8.