The patch looks fine to me. There is just one comment opn these lines :
if (SameSurface){static BOOL WarnSurface = FALSE;if (!WarnSurface){FIXME("\tSame source and destination could cause display problems\n");WarnSurface = TRUE;}- }
Why did you add this ? If you verified your patch and it's working, why add additionnal debug informations that will only confuse people :-) ?
Moreover, I do not know the performance hit between a 'memcpy' and a 'memmove', but well, one could have put the old code in a if (!SameSurface) to have the fastest path available to the most common case.
A part from these nitpicks, the patch looks fine and I will test it this evening on FalloutTactics to see if it fixes the screen corruption :-)
Lionel