Thanks for the report. This is expected behaviour rather than a mis-parse, but you're right that the error message doesn't help you find it.
Ordinary Objo strings escape a double quote with a backslash. Doubling quotes ("") is not an escape in ordinary strings. The only place quote doubling exists is verbatim strings (%"..."), where "" produces one quote character. Separately, a run of three quotes is the multiline-string delimiter, and the opening """ must be followed immediately by a line ending (content starts on the next line).
So your line lexes as:
"String " - an ordinary string, ending at the first quote after the text
"" - an empty string
""" is not valid." - a multiline-string opener with no line ending after it, which is the error you're seeing
That's essentially the split you sketched. It isn't an unresolvable lexer conflict, though: because ordinary strings have no "" doubling rule, """ at the start of a token is unambiguously the multiline opener, and the compiler rejects it when a line ending doesn't follow.
What to write instead:
Throw New InvalidArgumentException("String \"" + value + "\" is not valid.")
or with interpolation:
Throw New InvalidArgumentException($"String \"{value}\" is not valid.")
That said, the fair part of your point is the diagnostic - "Multiline string literal must start with a line ending…" gives you nothing to act on when what you actually wrote was Xojo-style doubling. I've logged an improvement for that here: Clarify diagnostics for quote runs at string boundaries.