The
Combine
operation merges all the selected Meshes into a single Mesh object. However, Combine is not a Boolean. The triangles of the meshes are simply appended, so overlapping objects will still be overlapping regions of triangles. New Face Groups are assigned for each input object.
The
Separate Shells
operation finds all disconnected regions of triangles of the active mesh - we sometimes call these connected components - and creates a new mesh object for each region. In some tools these are referred to as "shells" and we have copied that terminology here. This operation discards the original mesh, so if you need to keep it around, do a Duplicate first.
The hotkey for Combine is y, and for Separate Shells it is shift-y.
The example below shows a single mesh (left), which appears from this viewpoint to be a single shell, but is actually two overlapping shells (middle left). Separate Shells will turn this single self-intersecting mesh into two separate Meshes (middle right), and Combine will merge them back together (far right).
So, in this case Combine and Separate Shells are "opposite" commands, however this is not always the case. If you Combine two Meshes that each have two shells, and then do Separate Shells, you will get four Meshes, not two.