Took a little longer than anticipated, but here we go. You can see in the images below how the aim is off.
The white sphere is a debug sphere drawn at the worldspace location corresponding to the mouse position. When you right click, the character switches to aim mode and tries to point the gun at that spot. The red line is a debug trace from the barrel tip to where the gun is actually pointing.


So, you can see that the shots are hitting to the side of the target, which is because the gun is being held to the right of the character's center of mass. However, it's also overshooting slightly, as you can see in the second image. That, in turn is caused by the gun not being perfectly level. That's shown below.

That's the base, aim straight ahead pose, with 0 pitch and 0 yaw. It's hard to see, but the rifle is pitched upward
ever so slightly, causing the aiming discrepancy. The problem with fixing it is that, as far as I can tell, you can't edit the socket rotation from an animation. Instead, you have to edit it from the base pose, which is below.

The rotation parameters for the hand socket are really screwy. When I first attached the socket to the hand joint, its rotation and position were wildly wrong. I tweaked it as much as I could, but it required adjusting the pitch, roll and yaw, so I can't just key in that I needed a 90 degree roll, for example.
Again, I think the way this is normally solved is to create a special joint in the skeleton that you export as part of the .FBX, which Unreal interprets as a socket. That way you can make sure it's right in the modeling program. Unreal was built with Maya in mind, supposedly, and Blender's .FBX export has some issues, so I'm not sure it'll work like I intend. I haven't tried it yet though. More to the point, I had some major issues trying to get the dummy gun model in Blender to stick to the hand like it was supposed to in the first place, so I suspect I'll be fighting Blender more than Unreal.
Related to sockets, I haven't figured out yet why they seem to lag behind animation slightly. The "hair" on that model is attached to a socket on the head, and when he runs you can see the hair moving a frame or two behind the rest of the animation. Very strange.
Another bug I haven't figured out yet is shown below, where the aiming reticle in the UI gets placed in an obviously incorrect location when aiming in certain locations. I think it happens when the collision trace from the gun hits nothing and the screen projection defaults to 0,0 or something. Still, in this image I'm clearly aiming at the ground and yet it still happens.

I should probably be asking these things on the Unreal support forums, now that I think about it.
