I think it might be due to the fact the Player has networkownership of the NPC. You can try temporarily changing the Ownership to the server then using LinearVelocity or instead of using LinearVelocity use Part:ApplyImpulse(). I am unsure if ApplyImpulse would fix the problem, I just think it’ll be better to use that instead of LinearVelocity.
Edit: I would avoid changing networkOwnership because of the new ServerAuthority that’s coming to Roblox. Which might fix the current problem you’re having right now. Not sure if it will nor am I sure when it’s coming out.
setting the pushed parts’ networkownership to the client is (as far as i know) the only way of making the physics appear smooth (to that specific client, not other clients)