I2C slave protocol

can you check the behavior by replacing your requestData() handler with

void requestData() { // send the position of all 4 pots
  int data[4]; // buffer for the TWI answer

  for (int i = 0; i < 4; i++) {
    if (moveing[i]) {
      // return -1 if the slider is moving
      data[i] = -1;
    } else {
      // respond with message of 2 bytes MSB first
      int value = analogRead(analogueChannel[i]);
      uint8_t * dataPtr = (uint8_t *) & (data[i]);
      uint8_t * valuePtr = (uint8_t *) &value;
      *dataPtr = *(valuePtr + 1);
      *(dataPtr + 1) = *(valuePtr);
    }
  }
  Wire.write((uint8_t *) data, sizeof(data));
}

Reading your code I assume the master expects MSB first whereas your arduino is little endian and thus has LSB first in memory, so I'm swapping bytes to build the answer when the slider is not moving. (if you have also an arduino as the master, I'm not sure why you would swap bytes on both ends - receiving a buffer would already then be in the right order)

The reason I offer this idea is that I believe (long time I've not used it) that when you use the Wire library in slave mode you should issue only one Wire.write() command inside the ISR in response to a request from a master.

My understanding is that's because the master is the one responsible for the clock to get the data back and the write() call is basically encapsulating a call to twi_transmit() which fills the slave tx buffer with your data. If you call write() multiple times in a row at a fast pace your are not guaranteed that the twi_txBuffer has been emptied and you'll overwrite existing data there (or something like this :)) )

give it a try

PS: nice looking piece of hardware !