My client refused to sync with my server with loaded TileEntity NBT data, and so after I couldn't find anything new to try online, I eventually added some world.isRemote breakpoints in my TileEntity's readFromNBT method. I found that none of my code was wrong, it was just that the client and server were being fed different NBTTagCompounds.
Now this can of course be fixed using packets to synchronize the client and server, but there has to be a better way than that. It seems like such