Luckily I don't give up easily. I've found a work-around, but this still does not solve the MEM2SPRITE "lockout" problem.
What I've done is create a new screen and sprite, and then draw my image and other stuff on that, then use the new sprite to display the results.
I'm a little concerned about the overhead of creating a new screen in a a game loop. since the paintbrush will need to continuously update the image via a new screen, 60 or more times a second. If it's a pointer to a newly created class instance, then that's ok, since that's what c+ is made to do anyway, but this does raise the possibility of memory leaks. (No offense to the programmers, it's one of the things about c++)
Here's the workaround. It does exactly what I need, but leaves me with performance and memory leak concerns.
// --------------------------------- //
// Project: sprite2mem-tes-13
// --------------------------------- //
SETCURRENTDIR("Media")
LOCAL PX1%[]
LOCAL argb%
LOCAL r,y
CREATESCREEN 1,1,320,240
CREATESCREEN 2,2,320,240
CREATESCREEN 3,3,50,50
USESCREEN 3
DRAWRECT 0,0,49,49,RGB(255,0,0)
USESCREEN -1
LOADSPRITE "dogncat1.png",1
SPRITE2MEM(PX1[],1)
MEM2SPRITE(PX1[], 2, 320, 240)
// Create a new screen and sprite to use as an intemediary step to publish
CREATESCREEN 4,4,320,240
USESCREEN 4
DRAWSPRITE 2,0,0
DRAWSPRITE 3,200,100
PRINT "HI",5,5
USESCREEN -1
DRAWSPRITE 4,0,0
SHOWSCREEN
MOUSEWAIT