Я прочитал очень четкие определения для этих терминов.
Защищено: доступ ограничен внутри определения класса и любого класса, который наследуется от класса. Доступ к типу или члену может выполняться только кодом в том же классе или структуре или в классе, который получен из этого класса.
Внутренний: доступ ограничен исключительно классами, определенными в текущей сборке проекта. Доступ к типу или члену возможен только с помощью кода в том же классе.
Protected-Internal: доступ ограничен текущей сборкой или типами, производными от класса.