If by the inventory dialog you mean the one you get when you press Tab or type inventory, I don't know how look gizmo having the same effect makes sense to the player. But I may have sorely misunderstood your question.
Said specs take single quotes, 'take/key'. The compiler will take this string, reduce it down to a set of dictionary lookup numbers (because "get" also works), and store the result in a special section of the script resource.
Local strings take curly braces, {Larry says}. The compiler will take this as-is and store it in another special section of the script resource.
Text strings take double quotes, "O.K.". The compiler is supposed to store these in a Text resource matching the script's number and store a lookup number pair instead.
This is why (instance {Test object} of Iitem uses curly brackets instead of double quotes. Object names aren't supposed to go in the Text resource.
In the end, the first two options both end up with a single 16-bit number in the script's code -- a pointer to that said-spec or string literal. But the Said command can't really tell you gave it a string literal and misinterprets each pair of characters as a dictionary number to look up. And fails.
If the third option were compiled the way it should, it'd put two 16-bit numbers in the script code -- a text tuple. This is twice as many bytes as a pointer, but the target isn't part of the script and this frees up memory in the end.
Things like Display and Print have special checks to see if the first argument is perhaps lower than 1000. If it is, they assume it and the next argument form a Text resource lookup tuple. If it's not, it's a pointer to a string of some vintage. And that's how (Print 5 10 #font 2) and (Print "literal" #font 2) can both work.
The rest of this is just rambling about punctuation, you can stop reading here.
For the record: " is a double quote, ' is a single quote. [] are square brackets, {} are curly braces, () are parentheses or round brackets, and <> are angle brackets or chevrons. That makes ?? double chevrons, which are used as quotation marks in certain languages and that can be a source of confusion when you call ?? or even <> "quote marks" while talking to a majority "" audience. Anyway, the compiler is only so smart and may have meant a bracket (closing parenthesis likely) but mixing single and double quotes got it confused. It figured ')) and all that came after was still part of the Said spec (which must be single-quoted) so it never detected any following closing parentheses to match the opening ones. And since they're also called "round brackets" the error calls them that. But that's just a theory.