MSCorlib.dll is the heart of .NET framework which contains all the type definition and most of the commonly used functionality. MSCorlib.dll is tightly bound to CLR, however System.dll is not tightly bound to CLR. MSCorlib.dll is loaded and bound in every .NET application, its the heart.
Why Microsoft includes both MSCorlib.dll and System.dll, most probably the plan was to keep MSCorlib.dll for the core functionality(and probably light) and System.dll for everything else. For example, System.Threading namespance includes everything except Semaphore which is implemented in System.dll. May be Microsoft thought everything related to Threading is core except Semaphore, I am not fully sure about the Microsoft actual architecture.
However, so far with .NET, MSCorlib includes most of basic functionality of .NET including type definition like int, string, bool etc and few functionality is included in System.dll.
Since mscorlib.dll is tightly coupled with CLR, you do not even need to reference mscorlib.dll explicitly. Its being reference implicitly for every .NET application.