I think you'll need to create 2 arrays.
One for the current generation, and one for the Next generation.

The way it is now, you scan across each location and determine whether it's alive or dead and immediately change it's state.

Then when you check the next location, it's making a decision based on the bit you just changed, which can't be considered until the next generation.

As you scan 1 generation, place the results in a holding array. Once the entire board has been scanned for a single generation, update the LED's, and use that array as the "current generation", or copy it back to the first array.

hth,