I was struggling with yet another bug. The maps were very biased. 0 was used almost exclusively, only at the edges other values had a decent probability. Counting the value of the current tile as well (not just the neighbors) brought the first improvement, dealing with the equal amount of tiles compared with the current maximum count in a pseudo-random way fixed the problem completely. That happens in the following code, taken from the function above: