What is the proper way to cast during overlap events?

Have ShooterCharacter implement an interface that has the function AddCoin. No need to cast in that case just check if the OtherActor implements the interface and call AddCoin on it.

Here is a good example:

Except you would have for example

Execute_AddCoin