Being a programmer aside, coming from Java and C++, it took me a while to understand what on earth was going on sometimes, especially when it came to properties vs fields. (and structs, sadly. haha.)
C#, being a younger language than Java, has a few features that make it cleaner and more useful, but also a bit quirky, especially in the way Unity classes have been designed, which doesn't even follow Microsoft's recommended identifier naming conventions so sometimes, you really have to check to see what it's doing.
Unity has a lot of these properties where you think you're getting a reference to the thing but instead, it does some things under the hood and you're not modifying what you think you're modifying. In times like these, I've found it useful consult their forums and documentation often. Sometimes, those don't turn up helpful answers though.
Looks like without using sharedMaterial (which I think gets you access to the material asset), I think you'll be hitting a wall with Spine-Unity's rendering code since I think that keeps pulling info from the atlas data which may be why it only works in Update. Nothing in the code is setting the shaders but I think something in the code is definitely referencing the material asset tied to the AtlasAsset.
Sorry I can't help you with this further. Seems like a bit of a rabbit hole and I'm in the middle of stuff myself.