Can't read all this code on my phone even though it looks pretty well structured to me! Good job!

I saw this.  Isn't the exception message contradicting the `if` clause?

    if (value < CLEARED)
        throw new ArgumentOutOfRangeException("SudokuTile Value cannot be zero or smaller. Was " + value);

`CLEARED` is set to 0, and the if checks for 'less than 0' so the value could be set to 0.

Also, not having run the code, why does the `toString()` have four parameters on `String.Format`, only using three?

I'll have a closer look then I'm at a computer, but nice work!