off chip data storage

(side note, inside arduino do int and boolean variables use the same amount of ram ?)

The easy way to find the size of any variable is:

    Serial.println(sizeof(var));

upload, and the program will tell you how big the storage is.

currently the matrix is 31x31 boolean.

If you use a different storage technique, that matrix is only 31x4 = 124 bytes, which will easily fit into the onboard 512 byte EEPROM.
A boolean value can also be packed into a single bit (it only represents LOW or HIGH, true or false), 8 values in a byte, and 32 in 4 bytes.

So, if you pack booleans into bits, then 512 bytes of EEPROM are enough to store 4096 values, or a 64 x 64 matrix. It does make the code a bit more complex, but careful use of macros could make it bearable.

would the same method work one of those cheap external I2C EEPROMs?

I'm not sure which part of the method you mean. The way to read and write external EEPROM over I2C is pretty different.

HTH
GB-)