This part does not what it should do:
while(Wire.available() < 4 ); // Check for data from slave
{
...
The ';' after the while closes the while statement.
The '{' is not used. But you don't get an error message.
Could you do this:
// while(Wire.available() < 4 );
if( Wire.available() == 4) // check if actually 4 bytes are received.
...