how does serialEvent work?
As far as I understand, using an if statement wouldn't make any difference, but using a while statement would.

The serialEvent() function is executed within each execution of your loop() function if there is data available, so it would be something like:

while (true) 
{
    loop();
    if(data_available)
        serialEvent();
}


If you only have one byte of information in the buffer, then you wouldn't have any problem at all. 

But if you want to read multiple bytes at the same time, you would have to wait until the loop() is executed again to read the next byte. 

You will solve that problem if you write your  serialEvent()  like this:

void serialEvent()
{
    while (Serial.available())
    {
        // do something
    }
}


That way, you will read all the information available at once and then return to the loop.