MapSprite[x] = UsedSprite[n] will always be setting MapSprite[x] to point to UsedSprite or UsedSprite. UsedSprite's last update was 192,320. UsedSprite's last update was 256, 384.
You can see step-by-step what is happening by changing "spritelog << n << "Loading into " << x << " at " << i*64 << "," << y*64 << std::endl;" to
"for (int t = 0; t < x; t++) spritelog << n << "Currently in " << t << " is " << MapSprite[t]->X << "," << MapSprite[t]->Y << std::endl;"
Minor quibble: You probably shouldn't call Load() from a ctor, but should use an Init() or such. Very bad practice to do disk I/O in a constructor.
So the output it gives me when I do that is: