The way EEVEE works is not actually by casting light rays like Cycles, but by approximating light and shadow by "looking" out from the center of each Light Object and checking if any objects stand between it and other objects. If so, it casts a shadow behind that object.
The cube map resolution is essentially the number of times in each direction that the light will look. We could conceuptualize this by surrounding the light with a wireframe cube, where each vertex represents a pixel on the cubemap.
Lower resolution:

Higher:

Bit depth can be thought of as the number of decimal places the values can be calculated to.
Like if an object is, in reality, 1.0008m away from another object, using a lower bit depth might force EEVEE to make some decisions about rounding, like it might pick between the object being actually 1.0m or 1.1m away and drop the ".0008m". which we know is not 100% accurate.
Real location, no rounding.

Rounded down:

Rounded up:

This is not exactly how this works, but merely serves to explain the concept.
Higher bit depth means we allow EEVEE to use more decimal places for more accurate shadow casting.
All of this comes at a cost though. Increasing these values dramatically increases memory usage. From the docs:

A 512px cubemap has ~1.5 million pixels in it.

This will increase exponentially the higher resolution you go.
So if your scene has 30 lights and you set your cubemap resolution to 4k it means you have a total of 6,039,797,760 pixels to check light casts for each frame. Checking High Bit Depth essentially doubles that memory footprint.
I'm inclined to believe that the reason the lights don't show up when you check both is that you don't have enough memory to handle this load and EEVEE essentially gives up.