Well, I don't see redundant code. But there's probably not enough code.
I was running it in proteus and found that it stops reading the array whenever a borrow occurs from the high byte of R6.

At points like 1023, 767, 511, 255 bytes remaining, it exits the ARRAYREAD.

It uses the carry flag (STATUS,C) to indicate the "Timeout", which should only be cleared when both bytes are 0.

HTH,