Why does join syntax with stacked on clauses work?
The ON clause location determines join order. You can do this with parentheses, which makes it much clearer:

SELECT  *
FROM    MainTable P
        INNER JOIN    
          ( SubTable L
            INNER JOIN    
            SubTableType LT
            ON  L.Type = LT.Type
          )
        ON  P.ID = L.ID


You can now just omit the parentheses, and you come up with your second query which forces L JOIN LT to be performed first, followed by the join to P.

The error you are getting is because your 3rd query doesn't preserve the Chiastic Order. Look at it with the parentheses, and it will become clear:

SELECT  *
FROM    MainTable P
        INNER JOIN    
        ( SubTable L
          INNER JOIN    
           SubTableType LT
           ON  P.ID = L.ID --&lt;&lt;&lt; P is not a valid identifier here
         )
        ON  L.Type = LT.Type


My recommendation - if you need to force join order, always use the parentheses, and proper indentation of the code, which will make this immediately visible and easy to understand.

Since you are only using INNER JOINs, order doesn't matter, and the engine is free to choose to perform the join in any order it sees fit. When OUTER JOINs are involved, the order does matter, so you need to be able to force which tables you want joined first.