Implemented the path-reconstructing and following logic for my Dijkstra-based movement mask. It all went super easily. A surpise to be sure, but a welcome one!
I also added a few lines of code to crank up the pace of the game. Now when NPCs are in the fog, they will move instantly (actually, over 0.01s. Damn divide by 0! ) rather than consuming 1/4 second per tile like the player does. When in sight of the player, they will take the normal 1/4 second per tile. This makes the game feel a lot more responsive already.
Notice how it looks like the player is only 'waiting' for the enemies in-sight to move, even though every entity is updating whether it's seen or not. Neat!