This is pretty difficult to answer, because it's very dependant on what I'm looking for.
If I want much variation in trees/bushes then I use higher spacing values so that they mix more easily.
Do I want huge carpets of similar models then I just load 2 or 3 models max and use small spacing, quickly increasing instance numbers.
I don't think I'm very representative when it comes to these as I'm always trying to push the limits of the software and especially my machine.
I have 16GB of RAM so I like stuffing it with as many pops as possible up to the point I can just render it with the settings I have in mind.
Trees are usually in the 100s of thousands max, but only for large scale work.
Small scale stuff, which I do more often, has several 1000 trees.
Tree spacing is ~8 to 20 metres. Sparse trees around 40-50.
Bushes and the like scale accordingly, usually around ~5-10x more than trees.
Spacing of bushes is usually about half that of the trees, so 3-8 metres I remember to use the most.
With grasses I quickly have a couple of million of each grass species, usually I use 4-6 grass types.
On some occassions I use even bigger numbers, but I always try to avoid that because the populating process is still not multi-threaded
Spacing is typically around 0.05-0.25 (depends on model size).
My biggest population by area is ~25x25km with 8m spacing IIRC. How many instances are those, ~(25000/8)^2 = ~10M I think.
My biggest population by numbers I can't remember exactly right now.