Unfortunately, I think that the 'pile your plate high' thing is a vicious circle - some people do it, other guests at the same function end up with little or nothing, so at the next buffet they go to, they get up quicker and pile their plates high, because they know that, if they don't, they could end up with nothing, and that there will likely be nothing left for seconds either.
Or people hear about under-catered buffets, and don't want to take the risk.
To be honest, if this is happening, people don't need to take a whole lot more than normal, for the buffet to run low - if most people in the earlier part of the queue each take a couple of items extra, that could leave empty plates for the back of the queue, even if there aren't any really greedy people there.
But I think that, if you are planning a buffet, you should plan for the worst case scenario:
Cater for more people than you are expecting.
Cater for more vegetarians than you are expecting.
Call the vegetarians up first to the buffet.
Make sure the caterers don't put out all the food at once, but replenish the buffet several times.
Have the buffet served, if at all possible.
Shoot anyone who takes a massive plateful and leaves more than half.
This last option may not be entirely serious.