I2C locking with any mor than 3 bytes sent

This is wrong:

while(Wire.available()){
      for(readit=0;readit<howMany;readit++){

If howMany is non-zero then you don't need to test Wire.available. In fact you don't need to test it anyway. Just read howMany bytes.

Second, don't do serial prints inside an ISR which is what receiveEvent is, in effect.

You will get away with some prints before it locks up (64 bytes I think) but your rather wordy debugging prints will, I estimate, use about 20 or so bytes each incoming byte. So after 3 incoming bytes the outgoing serial buffer will fill up and it will wait for interrupts to empty it, which won't happen because interrupts will be turned off.