I worked around an automation error I've had for a while when calling CreateVertexBuffer. When specifying the byte size, the general method is to use the size of your FVF (in this case I'm using the legacy 32 byte standard) multiplied by the vertex count. It turns out that 3145728 works but 24576 * 32 (same thing) does not. I've seen things like this in VB6 before when working with Long's. Furthermore I changed it to hardware vertex processing instead of software (software was faster when rendering face by face, but now with batches hardware is faster.)
My next test consisted of using a 64x64 quadpatch (single 32768 primitive batch), testing regions and native textures of 8x8, 512x512 and 2048x2048. A quad size of 8 and 16 were tested (doubling the amount of pixels to be drawn on screen.)
On System A: 174 FPS in all tests.
On System C: 127 FPS in all tests.