Hehe, well....
Basically, the game engine has to somehow compensate for differences in ping between two players. The server keeps a state table of every player connected which is updated by players' game clients sending "command" updates at a rate of cl_cmdrate xx. xx = number of updates per second, a good default is 66, so your client would send an update to the server 66 times a second or once every .015 seconds. It works similarly as the server sends out updates to clients about the position of players, objects, and of events like shots, destruction, grenades, etc. The problem is, with your higher ping it means your client updates take longer to reach the server than somebody with lower ping, and you also receive server updates slower than the other player. What happens when you get shot behind a wall and "teleport" or get "dragged" a few feet away like you are describing above is that, effectively, the server went back in time (it keeps a history of several server-state "snapshots").
What that means is that the enemy player saw you out in the open, fired a shot, their game sent a command update to the server with the position and time of the shot and the server checks to see if you were at the position when he fired the shot. If you were, and if you've moved, the server will warp you back to the position you were shot and it will register, killing or wounding you. Usually you see this happening with players that have higher ping. This is their idea of lag compensation, frustrating but once you understand how it works it's a lot easier to deal with. If this mechanism didn't exist then every time a player with a higher ping shot at you while moving they would miss, and they would have to 'lead' you in their crosshairs to get a hit, because every time the server checked your position and you obviously wouldn't be there any longer because they'd be looking into the past.
Even with the very best and optimal rates, this is going to happen to you if you're fighting an enemy with a much higher ping. It's a game mechanic that will not change.
If you're getting choke, lower your cmd and updaterates. If you're getting loss then your ISP is unstable and there's nothing you can do. A good 'rate' is 25000-30000.
Hope that makes sense!