I have all inputs connected. In other words I have 64 individual sensors which I am aware are working and sending highs and lows as they should be.
The code is designed to run a set up routine and then a main programme loop which is repeated. At the end of the routine I have an expander read command on all chips to clear them as shown below in my test. I am going to simplify the whole program down to one array again. I will then prove if I can trigger, read, reset and repeat confirming that the chips will reset... Then I can assume something code wise although I cant now see how.

This should clear the registers if I am correct according to Nick Gammon's tutorial and the microchip datasheet.
I have the code Serial printing the detail from each chip before the read and after and in my eyes it is not clearing.
Thanks macegr. My lack of knowledge with these things gets frustrating and I usually get by but I cant even find a way to troubleshoot this .
Also, on your chips am I right in thinking that the arduino reset line is not connected to the MCP23017 chips? This is my last resort... If I hardware reset the MCP chips have no option but to zero! This is cowboy style EEE Development...

Below is my code to test and prove the expander not resetting... Have I done something silly here?
chip1intA=expanderRead(chip1, INTCAPA);// test to determine if system is zeroing
Serial.println (chip1intA, BIN);
chip1intB=expanderRead(chip1, INTCAPB);
Serial.println (chip1intB, BIN);
chip2intA=expanderRead(chip2, INTCAPA);
Serial.println (chip2intA, BIN);
chip2intB=expanderRead(chip2, INTCAPB);
Serial.println (chip2intB, BIN);
chip3intA=expanderRead(chip3, INTCAPA);
Serial.println (chip3intA, BIN);
chip3intB=expanderRead(chip3, INTCAPB);
Serial.println (chip3intB, BIN);
chip4intA=expanderRead(chip4, INTCAPA);
Serial.println (chip4intA, BIN);
chip4intB=expanderRead(chip4, INTCAPB);
Serial.println (chip4intB, BIN);
chip1intA = 0; //set up storage bytes for MCP23017 interrupt register values
chip1intB = 0;
chip2intA = 0;
chip2intB = 0;
chip3intA = 0;
chip3intB = 0;
chip4intA = 0;
chip4intB = 0;
chip1profile = 0;
chip2profile = 0;
chip3profile = 0;
chip4profile = 0;
expanderRead(chip1, INTCAPA);
expanderRead(chip1, INTCAPB);
expanderRead(chip2, INTCAPA);
expanderRead(chip2, INTCAPB);
expanderRead(chip3, INTCAPA);
expanderRead(chip3, INTCAPB);
expanderRead(chip4, INTCAPA);
expanderRead(chip4, INTCAPB);
chip1intA=expanderRead(chip1, INTCAPA);// test to determine if system is zeroing
Serial.println (chip1intA, BIN);
chip1intB=expanderRead(chip1, INTCAPB);
Serial.println (chip1intB, BIN);
chip2intA=expanderRead(chip2, INTCAPA);
Serial.println (chip2intA, BIN);
chip2intB=expanderRead(chip2, INTCAPB);
Serial.println (chip2intB, BIN);
chip3intA=expanderRead(chip3, INTCAPA);
Serial.println (chip3intA, BIN);
chip3intB=expanderRead(chip3, INTCAPB);
Serial.println (chip3intB, BIN);
chip4intA=expanderRead(chip4, INTCAPA);
Serial.println (chip4intA, BIN);
chip4intB=expanderRead(chip4, INTCAPB);
Serial.println (chip4intB, BIN);