You should post your solution so other people can find it.
Basically, I actually sat down and thought about what I wanted to do and realized the answer was surprisingly simple. Minecraft already implements a block listener: the one used by entity pathing. I through the WorldEvent.Load event, I add a new instance of IWorldEventListener. IWorldEventListener provides a method called notifyBlockUpdate which gets called every time a block changes (at least for my purposes, only when it matters). Through that method, I get access to a world instance, block pos and block state. From that, I just fetch the world server instance of my dimension and setblock at the right position. I have to manipulate the flags parameter in World#setBlockState, however, to ensure I don't cause infinite notification loops.
That will defiantly work for blocks, but it will not work for TileEntities don't know if you wanted that, but just to let you know.