Worth noting that I spawn actors programmatically as well and material needs to be applied after “begin play”. I did try creating a UMaterialInstanceDynamic out of UMaterial and then applying it to both the mesh and mesh component (alone each or together) - but the result is the same - it shows as having the correct looking dynamic material instance in the properties - but doesn’t show in the viewport.
Example:
In this case material applied only to static instanced mesh component, but applying it to static mesh underneath also shows up as having “worldgrid” material in the viewport, while the mesh has the material applied in the properties