The short answer to your question is as much as it possibly can, once it gives processes what they can use. The alternative is to leave the memory free which is wasteful. A machine with 16GB can't use 12GB today so it can use 20GB tomorrow. Any memory not used right this second is potential to save I/O and other effort that's forever lost -- you can't save memory for later.
If you're thinking, "but I need my memory free now so I can use it later", purge such nonsense from your mind. You can use it now and use it later. There's no tradeoff to make here. In fact, if you're using it now, you can use it later just by not doing anything. If you're not using it now, you have to do work to use it later. So using it now makes it more likely you'll use it later.
You seem to have a misconception that memory can only be used by a process or it's kernel overhead. That's not true. On a typical system, the vast majority of physical memory is neither free, used by processes, nor consumed by kernel overhead.
For example, suppose your system has plenty of free memory, and you run
top, and then quit out. Your system has two choices. It can keep the
top program in RAM or it can discard the pages that contained it. Let's look at both choices:
If it makes the RAM free, that takes effort. And worse, it's effort that has to be undone in order to use the RAM. And if you run
top again, the program will have to be loaded from disk, which is very slow.
If it keeps the pages in RAM, and you run
top again, it doesn't have to load the problem from disk. That's a huge win. And if the memory is needed for some other purpose, it can transition directly to that purpose without having to go to the effort of making the memory used and removing it from the free pool.
So the pages of RAM will stay in use holding the executable. This use is not associated with any process, since
top isn't running. But it's not free, since it contains data that may be useful. And it's not overhead -- should the memory be more useful doing something else, the contents can just be discarded since the executable can be paged from disk if needed.
And, in fact, on a typical system under typical load, the vast majority of memory contains information that might be useful in the future but can be discarded if memory is needed for some other purpose.
If you're looking at
/proc/meminfo, the number you should probably be looking at is
MemAvailable. That combines both free memory and memory that contains information that can be trivially discarded should more free memory be needed.