Thanks for following up and for setting that up. So some good news/bad news/great news.
The good news is after reading your response I went back and gave booleans another try. At first I got terrible shading artifacts again, but after some poking around in the Object Data Properties tab I noticed my Auto Smooth angle number was dimmed out. I could still change the number, so I thought maybe it was just a minor visual bug. Then under Geometry Data I noticed that there was a Clear Custom Split Normals Data button. I clicked that and suddenly my boolean difference with subd looked flawless. I vaguely remember in a moment of frustration flailing away under the Mesh > Normals options and probably didn’t undo everything.
The bad news is that after playing around for a while I realized this wasn’t actually going to achieve the effect I wanted. To have barrels coming out of the turret body and have a nice little bevel to simulate a light welding effect where they join, I’d have to use the Union boolean and apply it. Union wasn’t quite as flawless as difference, and in order to get the render effect I had to apply it. When I apply a boolean it all goes to hell again with subsurf. I’ll definitely have to do a better deep dive on booleans in the future to see what you can and can’t get away with when using subd. There seems to be some hope there, but it’s finicky as hell.
The great news is that while playing around with the shrinkwrap modifier I got the perfect blend of being lazy with the bevel shader without having unnecessary geometry in unwanted places. I created a cylinder, gave it the desired subsurf, shrinkwrap project (Y, positive), create a vertex group on the edge ring that would be attaching to the barrel, have the project on the shrinkwrap affect only that vertex group, apply, join the objects, render:

I think there is one more workflow I can think of that might work here, and that involves the Data Transfer modifier. I’m going to have to go dig up the video where I saw this technique, but it worked kind of like shrinkwrap in that you’re duplicating your base object and transferring its mesh data over to the dupe and then…you do stuff…and it ignores distortions.