The populator creates a number of candidate instances, with the average spacing you specify, e.g. 10 metres). (It's not completely accurate to say that's the average spacing, but that's approximately what happens.) For each candidate instance, the density shader is evaluated at the candidate's location to determine the probability that the candidate will be accepted. If the density shader has a value of 0.5 then there is a 50% chance that the candidate will be accepted. If the density shader returns 0.1, then there is a 10% chance that the candidate will be accepted and a 90% chance that it will be rejected. The density shader doesn't actually control the spacing or density of the instances - but that happens as a natural consequence of changing the probability of acceptance of a large number of instance.
As an example: over a large area with a density shader of 0.5, if your original point spacing was 10 metres (in other words 0.01 objects per square metre), the density shader would reduce the density to 0.005 objects per square metre or increase the average spacing to about 14 metres (not 20 metres, because density is per square metre).
Even if the density is as low as 0.1, it will only increase your average spacing by a factor of about 3.16 (because 1 / 0.1 = 10, square root of 10 is approximate 3.16). So you might want to make dark parts of your density shader much darker than you intuitively expect.
Matt