With high ping, I feel like your local game client and the server disagree on what is happening. I've heard secondhand that the game code only uses one set of "things" (i'm not a coder, can you tell?) and that it doesn't try to sync your local actions and the server actions. I know 1v1 fighting games use netcode like that, but I am not a programmer and I'd love if someone could shed some light onto this topic... :
You can't really sync real time data. I have no idea how WB netcode works but I guess the problem is something like this. The client looks at what the player is doing (move mouse right, press block) and sends messages about it to the server. But in the meantime it also updates the screen with the results (right block). When the server receives the data it will calculate the results (including if block is to late etc.) and sends it to everyone. If data is corrupted then the server can reach different conclusions than the client, and as sane persons WB coders made the server override the client and so you can see a right block but still suffer damage. (I guess you could have the client wait for the server before reacting to controls if that's what you mean by sync, but then you'd have lag on your own controls).
And data can be corrupted in various ways. Values can change, packets of data can get lost or arrive in the wrong order.
I think the problem WB has that it is dependent on order. A normal shooter for example isn't. "up, left, left, up, left, ..." or "left, up, up, left, left, ..." will both have you aiming in the upper left corner. "left, up, block, ..." or "up, left, block, ..." or just "up, block, ..." is a life and death difference though. Something like that anyway. The further away from the server the more time for the data to be corrupted obviously.
In any case those are mostly speculations and perhaps wrong.