Why is it when I set up a Johnson counter, the number sequence rotates fine, but I can't get a ring counter right (explanation below)?
Is there any reason why you do not want to start your loop in a known configuration before each run? Generally for logic design, you want to have a clear startup sequence. Otherwise you are leaving the operation of your circuit to whatever ambient conditions exist at power on which can be dangerous.

Perhaps you could feed the output of your array to a comparator at startup and see whether the output/input is high/low. Then based on that you could keep clocking your ring counter until the output is as expected? You could then disconnect the comparator via relay. Could you elaborate on what your interactive digital constant actually is? Thanks.