OnSetMaterial : Called by the IVideoDriver implementation the let the renderer set its needed render states. This is called during the IVideoDriver::setMaterial() call. When overriding this, you can set some renderstates or for example a vertex or pixel shader if you like.
OnRender : Called every time before a new bunch of geometry is being drawn using this material with for example drawIndexedTriangleList() call. OnSetMaterial should normally only be called if the renderer decides that the renderstates should be changed, it won't be called if for example two drawIndexedTriangleList() will be called with the same material set. This method will be called every time. This is useful for example for materials with shaders, which don't only set new renderstates but also shader constants.