Questo perché quando la stringa dichiarata come VARCHAR(max) supera 8000 byte, la stringa viene spostata in LOB_Data da IN_ROW_DATA. IN_ROW_DATA memorizza solo i puntatori, ecco perché l'errore non veniva visualizzato perché c'è ancora molto spazio rimasto.