So :
it is a bug in the game (and it works fine in Windows because, miraculously, the three others words of the 'fake' DDSCAPS2 structure are set to '0' or because Windows only checks with 'dwCaps' and not with all 'dwCaps' fields).
somehow the docs are wrong and it should be a DirectDrawSurface
that is returned by a CreateSurface even if the CreateSurface is called on a DirectDraw4 interface...
What does the dwSize member of the structure say ?