I apologize for jumping in here with "random thoughts" but this just crossed my mind. In your "resize memory block" routine - at label "tam1:" if you haven't moved it - what's in bx? I see that it's "bytes to keep", you add 15 to "round up" and shift right to convert to paragraphs to keep, but I haven't tracked down where it "comes from" (yet). If that were off, it might explain your problem (if it still exists). What I would try is to "keep" a full 1000h paragraphs. That should save an entire 64k for "pixel.exe" (actually a .com file - the name doesn't matter) and still give you plenty of memory above it for the "load and execute" int 21/4Bh. Just a thought.
I may have to try again to get DosBox installed - doesn't seem to work well for me in FreeDos...
Best,
Frank