How can I update a mesh's physics while in the game engine?
An ideal way, in my opinion, is to have the entire character surrounded by a bounding box which will be used to have basic collisions with map entities (examples: walls, barrels, floor). Also, we can have a separate object, your character model, that will be used to have collisions with specific entities (example: bullets, rays). Your character model will have a simple python script that will ensure that his mesh updates every tick, making accurate collision. Furthermore, since the character model is contained in the bounding box, it will constantly collide (as they should be parented), meaning that your player will instantly launch off! We can fix this by changing both objects' collision group and collision mask. The collision group identifies which group of collisions it is in, and the collision mask identifies which groups it collides with. An object's collision mask and collision group is located in the physics tab.

This way, we won't have the character model get stuck and have jittery movement when playing animations (as the collision area will change shape), and specific collisions will work as you have your character model serve for that purpose.

To update the character's mesh every tick, use the following:

import bge

def update(cont):
    own = cont.owner
    own.reinstancePhysicsMesh()

if __name__ == "__main__":
    update(bge.logic.getCurrentController())