The reason that `col2` sorts in the order that it does is easier to explain than the reason that `col1` is sorting in this way.

The reason that you are seeing this behavior when sorting on `col2` is that the six variations of the `e` character, given various Collation options (not options that are visible / tailorable in SQL Server, but can be played with here: <http://demo.icu-project.org/icu-bin/collation.html> ) actually have the same sorting weight. This means that between themselves, there is no inherent order.

Having no inherent order would seem to imply that sorting by `col1` shouldn't have any preferred order, but it does. This _can_ be replicated using the ICU demo linked above, but it seems strange, at least at the moment, that there would be a different option when sorting single characters as opposed to multiple characters. However, this is not impossible, just unexpected.

The problem with getting concrete explanations of these rules is that the Unicode sorting rules, while definitely documented, are a recommendation. It is up to vendors, such as Microsoft, to implement those recommendations. Microsoft did not implement the recommendations exactly as stated in the Unicode documentation so there is a disconnect there. Then, there are different versions of the Windows Collations (you are using version `100` which came out with SQL Server 2008) and that is tied to a Unicode version that is much older than the current version that the ICU demo is using.

Still, for now you can try running my adaptation of the sample code from the question below. I added another column and adjusted the inserted order of 2 rows. Sorting on columns 2 and 3 result in the same row order since the "e" characters have the same weight.

I have an idea on getting more info on possibly how the sort order is being determined for `col1` (single character) and will update this answer later with that info.


    USE [tempdb];
    
    -- DROP TABLE dbo.OddSort;
    CREATE TABLE dbo.OddSort
    (
        id INT IDENTITY(1,1) PRIMARY KEY
        , col1 NVARCHAR(5) COLLATE Latin1_General_100_CS_AS
        , col2 NVARCHAR(5) COLLATE Latin1_General_100_CS_AS
        , col3 NVARCHAR(5) COLLATE Latin1_General_100_CS_AS
    );
    GO
    
    INSERT dbo.OddSort (col1, col2, col3)
    VALUES (N'e', N'eA', N'è 1')
         , (N'ê', N'êE', N'ê 5')
         , (N'ë', N'ëC', N'e 2')
         , (N'è', N'èD', N'é 4')
         , (N'é', N'éB', N'ē 3')
         , (N'ē', N'ēF', N'ë 6');
    GO
    
    SELECT UNICODE([col1]), *
    FROM dbo.OddSort 
    ORDER BY col1;
    
    SELECT UNICODE([col1]), *
    FROM dbo.OddSort 
    ORDER BY col2;
    
    SELECT UNICODE([col1]), *
    FROM dbo.OddSort 
    ORDER BY col3;