Sorted the problem. It needed to be:
outputChar(character[hour] ^ dp_bit);
I couldn't see why the next 10's minute digit was also being affected and why when I added the static to dp_bit it caused this weird 3 way random brightness flash. By using ^= put the result back into the byte held in the character the hour was using, which is why it actually flashed when static dp_bit wasn't used. As the 10's minute was using the same number, on the next run round it also had the DP switched on.
Using the ^ now only applies the result at the time the procedure is called
Many thanks for all your help!