Putting a signed integer into external EEPROM

You haven't understood, how I2C works. Try this version:

long EEPROMReadlong(int deviceaddress, unsigned int address )
{
  long four, three, two, one;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(address >> 8));   // MSB
  Wire.write((int)(address & 0xFF)); // LSB
  if (Wire.endTransmission()) return -1;

  //Read the 4 bytes from the eeprom memory.
  if (Wire.requestFrom(deviceaddress, 4) == 4) {
    uint8_t i;
    uint32_t v = 0;
    for (i = 0; i < 4; i++) {
      uint32_t r = Wire.read();
      v |= r << ((3-i) * 8);
    }
    return v;
  } else {
    return -1;
  }
}