Got to the bottom of the oddities I saw. Don't understand the why, but it's deliberate code in two spots. Here's one.
if UTM.southhemi then UTM.Y:=UTM.Y*-1;
// reversal of UTM-X and UTM-Y to geodetic orientation
// kasta om UTM-X och UTM-Y till geodetisk orientering
t := UTM.X;
UTM.X := UTM.Y;
UTM.Y := t;
Original comment is in swedish. I've used Google Translate to convert the commments. Based on that I've added a property: TWGS88.IgnoreGeodeticOrientation. It's false by default, which leaves the existing code to run. Setting it True though stops the above conversion. All values are now as I expect them.