In this case you may provide the part of relevant code or even give the link to Github etc.
At least, it would be good to have as much information as possible about your use case, otherwise it is hard to pinpoint the problem.
Sorry, I am asked to keep my code confidential, but I can show you the console logs where I named everything with BabylonJS APIs and provided some outputs, so you can understand the flow of my code.
The only reason I can see onBeforeRenderObservable being triggered for your mesh and not material.onBindObservable is that there is a null material assigned to your mesh or that for some reason your material is never ready (material.isReadyForSubMesh always returns false).
and apparantly has some side-effect, that causes my mesh and material to be ready and visible afterwards.
UPDATE:
mesh.material.isReady(mesh) returns false indeed, which always causes the mesh not to be drawn.
I solved my issue by checking if mesh and material are completely ready, and if not trigger another render on-demand, until actually ready.
Honestly I think the BabylonJS API could be improved here: For example SceneLoader.ImportMesh onSuccess callback should wait until materials are ready.