You shouldn’t be using the MaterialTable. That is old-style materials and not working as you (probably) think.
The material table you are using in code is for mapping between objects and materials. If you have five objects in your document, and you assign them all the same material you’ll end up with five entries in the material table. Now if you have 100 objects, but no materials assigned to them, yet you have 20 materials visible in the materials panel then material table will be empty.
What you are really looking for is the RhinoDoc.RenderMaterials Property table. That doesn’t have events exposed for when materials are added, edited or deleted in that table though. I am currently not aware of a mechanism to get those from RhinoCommon and if that is published (there are obviously mechanisms, otherwise the materials wouldn’t show in the materials panel XD ).
Probably need to poke @johnc and @maxsoder about how to get events for these document changes