Entering numbers at the Serial Monitor

int incomingByte = 0; // for incoming serial data

Why? If the name implies byte, why is the type not byte? Use a name that IS what it implies.

                 if (isDigit(incomingByte)) {

isDigit() expects a char.

      // convert the incoming byte to a char 
      // and add it to the string:
      inString += (char)incomingByte;

Another clue as to the correct type for the variable.

If I enter 999999999 (i.e.9 digits), everything is OK - if a tenth digit is added, it overflows.

Have you looked at the documentation for the toInt() method? Despite the stupid name, it does not return an int. Does the 10 character value you are trying to enter actually fit in a variable of the type that toInt() actually returns?

There IS a reason for the reference page. You ARE expected to use it.