There are actually multiple issues...
One is that the 'bank' you are programming will 'disappear' when you try to program anything else in the same bank. That means that yes, you can program a different bank that what you are executing in. But that brings up another issue...
If you have your top page at C000 in real space, and the next page at 4000, where do your put the next page? At 8000. So, you can put a lower page with programming code at 8000 and you 'could' get at the top two pages from the other bank, but how do get to other pages and keep your code visible somewhere to execute from?
And then there's the issue of interrupts... Gotta remember where all your vectors are gonna go while that entire bank is invisible...
The easiest way to do this is to get your routines working from one page to a page in another bank, then transfer them to RAM and modify them so they work 'anywhere'...
Unless you have a specific configuration you plan on using and ONLY that configuration. Which is not a bad thing. In my case, for my interactive stuff, I made my program call routines that sat at 4000 and 'switched in' the target page at 8000 to do any writes and/or management of my flash. I just picked the pages I used so that they wouldn't collide and would abide by the rules above.
Mike