Changing magnitude of vector changes its direction

I think this line is wrong:

FVector BouncingVector = EndTrace.MirrorByVector(Hit.ImpactNormal);

You are mirroring the EndTrace vector which is just the end location of your weaponrange which is a vector from (0,0,0) to the EndTrace.

Instead you should mirror the remaining vector from the impact point to endtrace (which should be parallel with ShootDir):

FVector BouncingVector = (EndTrace - Hit.ImpactPoint).MirrorByVector(Hit.ImpactNormal);