Maybe if I counted to random(40)? Would that produce the same pattern as testing 5>random(100) each time?
No, the results will be different. random(100) could potentially produce >50 many times in a row. If Thing[x].P were equal to 50, then the if statement would be true often. If you use your random(40) and then a smaller Thing[x].P you will much less often see repeats.

With that said, what you describe is a common way to make random things less "twitchy". You simply establish a "duration" that determines how long before "thing" can be updated again. Generally this is done after the previous update. You will probably want to do this independently for each Thing though rather then for all of em. It will make it "feel" better when people play.