Yesterday my game AI started going haywire on me. At a random point, all of my creatures would start moving in a single direction.
Turns out the cause was Random.NextDouble starting to return only zero. And it turns out the cause of that was multiple threads accessing the same instance of the Random class.
As I would have expected had I thought about it, Random is not thread safe. If it gets accessed from one thread while it is in the middle of an operation for another, its internal state gets mucked up and it just spits back zeros from then on.
The solution is to use one instance of Random per thread (which is what I did) or to ensure synchronized access.