if (currRow++ > 7) currRow = 0; //Get ready to light next row of matrix
The time to go back to row 0 after row 7 is extremely small, it cannot be the cause of flicker. Also, if that was the problem, the flickering row would move when you re-wired the shift register. But it is good that you are thinking logically about the cause of the flickering.
If the delays between lighting rows of the matrix was not identical, the result would be that the rows would have different brightness. Rows that were lit for slightly longer would be slightly brighter.
Flickering can be caused by delays that are not steady, not always the same length. If the code was the problem, all rows have steady and identical timing except the last row, where the timing is not steady. I can't think how that would happen in this sketch.
I think the problem is more likely to be hardware, perhaps a soldering fault? This might reduce the voltage to the point where it is on or near the limit of what is needed to light the LEDs, causing them to flicker, for example.