The layers would have world borders, which would detect on what part of the world the player currently is
and unload* all other layers that are not next to the current layer.
*with "unload" I mean setting the layer invisible/opacity 0%.
This is kind of pointless cause everything that is not visible on screen is not rendered, so setting a layer to invisible for objects that are not rendered have no point at all.
Using this system also means that the game has to load a whole new layout and pass all the data
from the previous layout over to the newly loaded one (e.g. last enemy positions, player state and many more).
For this one i think you are over complicating things a bit. All you have to do is store important stuff in arrays, dictionaries or whatever - which are global objects.
You can also apply a lot of own rules what to do with that data, for example. If npc is on same layer as player -> do some stuff else do something else.
I did something similar using about over 10 arrays and dictionaries and to store data for npc, inventory, items, quests for main map (900x900 tiles) + 80 minimaps.
Everytime when player moved between main map -> mini map -> main map every important data from current map was saved, then layout changes and on start of new layout all important data was loaded again. And that was a game for mobiles, each change of level took no longer than 5 seconds on Samsung Galaxy S3. So on desktop you can easily push it limits a lot more.
Here are some scenarios again:
Player is on the right edge of the layout named Layer #2 = Go to the separated layout named Layer #3
Player is on the left edge of the layout named Layer #2 = Go to the separated layout named Layer#1
That's rather super simple thing to do