I had a little luck using FSS as a child of a surface layer. Like hooking it to individual layers and from there you can assign different colors, size, and density per layer, etc. I also used a distribution shader to assign altitude and slope when hooking a FSS to the base layer. Depends on what you have hooked to each surface, but it usually works for me.
I also was wondering about setting population to random size and rotation but that is getting complicated for me.
Great render btw!