Nicolas, a ordem dos modificadores nesse caso não influenciam o comportamento.
No caso do "protected internal", você está definindo que o membro assinalado com esse modificador poderá ser acessado somente no mesmo projeto (assembly) e pelos filhos dessa classe seja dentro do mesmo assembly ou fora dele.
Tente fazer um exemplo assim:
Crie dois projetos (Projeto1.csproj e Projeto2.csproj). Depois crie uma classe em casa um dos projetos (Projeto1.Classe1 e Projeto2.Classe2). Crie um método Teste1() como protected internal na Projeto1.Classe1.
Na Projeto2.Classe2 crie um método Teste2() e neste método instâncie a Classe1 e veja que o método Teste1 não aparece na lista para ser usado (por estar declarado como internal)
Agora faça a classe Projeto2.Classe2 herdar de Projeto1.Classe1, no método Teste2() você vai perceber que poderá chamar o método base.Teste1()
Não se esqueça de adicionar a referencia do Projeto1 em Projeto2.
A documentação oficial te ajuda a entender melhor: https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers
Obriago