To me, one can use either to do some steps in memory, instead of writing data to a location on disk or a network location, and expedite the process.
The way I think about this distinction is:
- an in_memory workspace involves temporarily storing a spatial dataset (akin to a file geodatabase but not quite the same - see Why are z-values replaced with zero after in_memory use in Python?) in memory. This speeds up geoprocessing.
- Make Feature Layer creates a layer from a spatial dataset so that it can be used as input to any geoprocessing tool that accepts a feature layer as input. This enables (but does not speed up) geoprocessing.
A layer (unless written to a layer file or saved as part of a map document) is only stored in memory, but it is not stored in an in_memory workspace.
Remember that when you are in ArcMap, what you see in the Catalog window are spatial datasets (i.e. not much more than x,y coordinates, coordinate system and attributes), and that they only obtain a myriad of other properties to configure such as symbology, MapTips, hyperlinks, etc after you have added them as layers (which appear in the Table of Contents). This is the same distinction as above.