That probably is happening because your event sheet isn't picking a door instance. If you don't have a specific instance picked by an event, then the action happens to ALL instances.
So for instance, something like:
* System | On start of layout
local variable newDoorID = 0
* System | For Each [] Door
Door[] | Set doorID to newDoorID
System | Add 1 to newDoorID
This will cause each door to get a unique ID at the start of the layout. If you want globally unique door IDs, then just make newDoorID a global, rather than an instance of the on start layout. You can also do a for-each ordered if there is another criteria that you want to use to determine the IDs (such as position along the x axis, or something)
If you want, you can also save the level to load in a text instance variable on the door, and then use common code like the following (you'll have to add in the stat saving and all, sorry)
* Keyboard | On [use your key here] key pressed
* Player | is overlapping [] Door
* Door | X Is Locked //Just an example
* System | Go to layout Door.levelToLoad
For an example. Of course you can spruce it up, but at least then you don't have to do any custom mapping of doors to levels.