The surface materials are those who are usually assigned when you import a mesh from a 3D editor. Surfaces define the areas of a mesh for which you can assign different materials. If the 3D model was designed well, then those surfaces relate to logical parts of the model. (On a car i.e. the material of: wheels, hubcaps, windows ...)
You can use the same Mesh in different MeshInstances. If you change a surface material of a mesh then it will be changed for all MeshInstances (unless you use copies of the Mesh).
The MeshInstance Material slots override the surface materials. So you can use the same mesh but replace/redefine selected materials of the mesh in a different way for each MeshInstance.