Arduino Wire communication with MCP23008 GPIO pin expander to turn on an LED with a button press
I see one major thing wrong at first glance:

  Wire.write(00000010);           //set all pins as output, except for #2 as input


That doesn't set GPIO 1 (which you call number 2 - counting starts at 0 not 1) to be an input, that sets GPIO 3 (number 4) as an input.  Numbers starting with 0 are octal, not binary. For binary the prefix is 0b:

  Wire.write(0b00000010);           //set all pins as output, except for #2 as input


And then you read using:

bitRead(inVal, 1)


which would have read GPIO 1 which is configured as an output.

So you have a switch on GPIO 1 which is an output, which you then drive high (causing a short internally which can damage the pin), and as a result you drive the pin HIGH internally. Now it's always high, so a read of the pin sees the HIGH you are driving from it. Hence it gets stuck at 1.

Fixing your IODIR write should help solve that problem.