Thanks to the comment from @estebanmolca, I've managed to resolve this! Thanks, man!
So, first I tried instance.set("show_on_top", true)
before add_child(instance), but nothing happened. Then, I tried instance.set_as_top_level(true)
next, which made the menu not show up at all, not even behind the tileset. I found that very weird.
After further messing around, I noticed that the menu was actually showing when "showontop" was true, but it was using the scene's origin instead of the player position! Since the player's starting position on the scene was far from it, I couldn't see it right away.
So, I had to do this:
instance = pausemenu.instance()
instance.set_as_top_level(true)
instance.set_position(position) #the position parameter here is the Player's
At first, the only problem was that the menu was being drawn down and right from the player's origin. I had to mess around with the rectangle's (the main node of the menu) anchor until it aligned up properly.
EDIT: After having trouble with the menu showing under anything that had a Z greater than the player's, including a tileset, I found the definitive solution: create a Node2D with a non-relative, high Z Index and add_child from within it, like this:
#menulayer is a Node2D. It's sole purpose is to have a big z index
pauseinstance = pausemenu.instance()
$menulayer.add_child(pauseinstance)