On older 8 bit FLASH PICs, read protection simply forced the returned program memory data to all zeros (NOP). No errors, no warnings just an unusable read!
Also on most PICs the /MCLR (Reset) pin can be disabled and used as an ordinary input pin. If its disabled, and the PIC is using an internal oscillator and the code in the PIC set the programming pins ICSPCLK and/or ICSPDAT as outputs near the start of the code, depending on their levels, the programmer cant set the required conditions for program mode entry due to level contention, and it can fail to detect the PIC or if detected, can fail to read or reprogram any memory area.