My understanding is that the double buffering was done in RAM (instead of VRAM). He did it by keeping the two last frames in EMS/XMS, calculating the delta, and copying only the parts that had changed from RAM to VRAM during VBLANK.
Source: https://fabiensanglard.net/stunt_island/#:~:text=I%20always%...