If you know anything about Perlin Noise, or Simplex noise, I'd suggest application of something like that.

You could have a selection of noise generators, which are functions that return values between 0 and 1 for a given x,y, and t (time) input. Pseudo randomly select N noise generators. Pseudo randomly generate the parameters for them. Average the result and apply a high-pass filter (say, values greater than 0.75 == has spikes). A modulo time domain will create the period of a noise pattern's repetition, and the seeds for generation of its parameters (t can be turns, of course).

Modulating with a Voronoi filter or other such filter before the isSpike() calculation can add interesting patterns. Biasing the result with simple patterns such linear or circular progressive waves towards the exit [ (distance_from_exit * t) MOD period], etc. can add directionality to the movement of the spikes and help prevent impossible spike rooms.

If you are dead set on using Conway's Automata you can simply select N cells pseudo randomly and XOR these same cells every N turns (no need to randomly select a different location each XOR). This is like re-seeding the automata sim with a known pattern every N turns and will prevent permanent stability perhaps at the cost of the odd long running emergent pattern (as it will be interrupted via the periodic reintroduction of chaos). You could experiment to discover a good starting "seed" which produces a nice amount of activity, use that seed as a constant for the spike floor, and then only slightly modify it via aforementioned periodic pseudo random XOR so as to have some control over what to expect without absolute pre-determination. While this may run counter to your stated desire not to simply trigger some traps to mix things up, it is offset by the initial introduction of a known behavior which meets the requirement of being in a somewhat known state.