Thanks for being patient and that explanation.  Here is a bit more detail.
I have 4 large satellite images that include multiple channels.  I have a script that tiles each satellite image separately into 128x128xchannels (red, nir, slope, and a few indices).  Each of these tiles are rotated 3 times, transposed, and rotated again.  So one tile becomes 8 tiles.  The script randomly assigns 72% of the tiles as training, 8% as validation, and 20% as test.
I do a little augmentation in the form of setting no data to a specific values in my channels and in my mask.  I also normalize my data.  I do this for ALL tiles (training, validation, and test).
I load the data and check it with a few image comparisons to make sure my training data aligns properly with my mask.  Everything here looks good.
I start training my model with the training tiles.  Currently there are about 30k total 128x128 tiles (72% of those as training) and I’m using a batch size of 16.  I run out of memory if I jump to 32.  After the first epoch my training accuracy is ~90%.  I run validation and also get about 90% accuracy.  I’ve been letting it run for a few epochs then stop.  Each time training and validation accuracy is 90%.
I now apply the model to the test tiles.  I check a few test predictions to the mask and a band of satellite imagery to make sure everything is looking good.  Sure enough it all lines up as it should and reporting about ~90% accuracy as well.  I actually run a confusion  matrix on it and all 3 classes are performing great (88% accuracy for the worst one).  I said 4 classes before because I actually have some nodata that I classify as a 4th class.  This nodata class typically gets 99 or 100% accuracy.
At this point I’m happy with how things are looking and everything makes sense.
To run my “production” model I’ve written another script that does tiling, a little augmentation described above (no data removal and normalization), applies the model, then outputs the prediction to a tile.  I merge all tiles and it’s done.
I figured I could feed this production model classification script one of my initial satellite images and I should get pretty good results.  This is where I’m getting 60% accuracy.  As I would imagine, and you said, it should be much higher.  Maybe I need to dig into my classification script more.