Ok, I am now able to give a bit more detail about what happens: As long, as we are in MOUSE_MODE_NONE (in the menu, or even in game, if we did not move the mouse yet, since we had MOUSE_MODE_NONE active), everything is fine. So once you are in game and move the mouse, mouse mode is set to MOUSE_MODE_WARP_CENTER, as it should. you can also see the screen/crosshair move for maybe 2 ticks/frames (for these frames, SDL_GetRelativeMouseState() gives x and y values, that are different from 0). After these frames. nothing happens anymore. SDL_GetRelativeMouseState(&x, &y) returns 0 for both x and y, regardless how much I move the mouse. If I now open the menu (esc), still nothing happens upon moving the mouse (this is only logical, since nothing changes, because no mouse movement is recognized and thus CMenus::OnMouseMovement() is not called, which would set mouse mode to MOUSE_MODE_NONE again). However, once you open a console, it sets mouse mode to MOUSE_MODE_NONE and then everything is fine again.
To summarize it: Obviously there is a problem with the combination of SDL_GetRelativeMouseState() and MOUSE_MODE_WARP_CENTER.
However, as long as we are in MOUSE_MODE_NONE, everything works fine (including moving the cursor in and out of the window and everything).
EDIT: nevermind, I fixed the problem. The problem was, that in CGameClient::DispatchInput(), GetMousePosition() got called called before MouseMoved(). This made the cursor warp to the center everytime before MouseMoved() is called, and then of course SDL_GetRelativeMouseState() returns 0.
I do not understand why it worked on other platforms though oO.