If this remains a program, and not an app, then you can can continue to use self modifying code by adding an extra buffer. So lets say GDB1 is the unchangeable level and GDB0 is your level buffer (this is what you use in the game).
[...lots of level stuff...]->GDB1 .Your level data for level 1
[...lots of level stuff...]->GDB2 .Your level data for level 2
Zeros(1024)->GDB0 .Your buffer
Copy(GDB1,GDB0,1024) .Copy all of level 1 into the level buffer
...Feel free to modify this now...
Copy(GDB2,GDB0,1024) .Copy all of level 2 into the level buffer
...Feel free to modify this now...
Copy(GDB1,GDB0,1024) .Reloads level 1 again, restored to normal like it should
...etc...