Replying here as too long and won't fit a reply.
Thanks for the patient and effort. This does not reply entirely to my question but collecting your tests I think I can now explain my queries and the others.
So, let's start with my query and why the result
SELECT 'me‚‚‚abcdef' COLLATE Latin1_General_100_CI_AS_SC_UTF8
the server (and so the parser) receives the string as UTF-16 and parse the string 'me‚‚‚abcdef', as it's embedded in single quotes the parser "create" a VARCHAR using the encoding of the current database, in my case (tempdb just installed)
SELECT DATABASEPROPERTYEX(db_name(), 'Collation')
SQL_Latin1_General_CP1_CI_AS
so the parser converts the string to a VARCHAR(11) COLLATE SQL_Latin1_General_CP1_CI_AS column (11 are the length required), so we have basically a
CAST(N'me‚‚‚abcdef' AS VARCHAR(11)) COLLATE SQL_Latin1_General_CP1_CI_AS
now, continuing executing the initial query:
'me‚‚‚abcdef' COLLATE Latin1_General_100_CI_AS_SC_UTF8
the server tries to convert the query to another collation, using the same type (VARCHAR(11)), so doing a
CAST(<STRING> AS VARCHAR(11)) COLLATE Latin1_General_100_CI_AS_SC_UTF8
that is
CAST(CAST(N'me‚‚‚abcdef' AS VARCHAR(11)) COLLATE SQL_Latin1_General_CP1_CI_AS AS VARCHAR(11)) COLLATE Latin1_General_100_CI_AS_SC_UTF8
which returns our 'me‚‚‚' (as the commas require 3 bytes so 2+3*3 == 11)
Now, let's test this on your last query:
SELECT CONVERT (VARBINARY(MAX), '‚' COLLATE Hebrew_100_CS_AS_SC_UTF8)
should be the same as
SELECT CONVERT (VARBINARY(MAX), CAST(CAST(N'‚' AS VARCHAR(1)) COLLATE Hebrew_100_CS_AS_SC AS VARCHAR(1)) COLLATE Hebrew_100_CS_AS_SC_UTF8)
how to verify that this work? Well, let's try with the string '‚aa'
SELECT CONVERT (VARBINARY(MAX), '‚aa' COLLATE Hebrew_100_CS_AS_SC_UTF8)
converted to
SELECT CONVERT (VARBINARY(MAX), CAST(CAST(N'‚aa' AS VARCHAR(3)) COLLATE Hebrew_100_CS_AS_SC AS VARCHAR(3)) COLLATE Hebrew_100_CS_AS_SC_UTF8)
why '‚aa' ? So there's space to convert the first character to UTF-8, as the second query is doing.
Just as a last verification of my explanation this query
SELECT 'me‚王abcdef' COLLATE Latin1_General_100_CI_AS_SC_UTF8
is returning 'me‚?abcd' this confirms the double conversion and the truncation to VARCHAR(10), 10 bytes to express the source string as Latin1