My simulator uses randomly generated round shares that are generated with simple algorithm mimics block finding procedure. (poisson process) To get statistically meaningful result, I used high quallity Mersenne Twister as a base pseudo-random generator.
pseudo code:
var sparseness = RAND_MAX / BTC_DIFFICULTY;
var roundShare = 0
while (true)
{
++roundShare;
if (MTrand() < sparseness) break;
}
return roundShare;
table of generated 120k round shares :
http://cl.ly/8wg3I plotted your sample:

and a sample I produced:

Please excuse the missing labels. x-axis is number of shares (in percentage of difficulty), y-axis is number of occurances (summing over windows of 10000 shares).
The results differ slightly, most significantly at around 0.