Hi,
The patch itself could be correct in the sense that indeed there might be a missing ActivateContext. But we should avoid making recursive ENTER_GL's. Between the ENTER_GL block there is a call to IWineD3DDevice_Clear which also calls ENTER_GL.
You could put a LEAVE_GL before it and an ENTER_GL after it but there is something else which you couldn't have known. A number of places in surface.c are messing with glDrawBuffer. These days activatecontext is also handling this, so in a number of places glDrawBuffer is redundant. This might be one of those places but I haven't checked that in detail. Stefan might be able to answer that.
Regards, Roderick