Лично я бы выбрал защищенный. Если подклассы в вашей собственной сборке достаточно хороши для вызова метода, почему подкласс в другой сборке не будет? Возможно, вы могли бы полностью преобразовать функциональность в отдельный (внутренний) класс.
Вам действительно нужно объективно подумать о цели метода. Внутренняя доступность почти всегда кажется мне неправильной. Главным образом из-за моего опыта, который я пытался получить из элементов управления или классов в среде .NET, где я столкнулся с кирпичной стеной, потому что кто-то решил пометить класс или как внутренний. Первоначальный автор никогда не замечал, что отсутствие доступа к этому методу значительно усложнило реализацию подкласса.
EDIT
Чтобы уточнить, внутренняя доступность для класса очень полезна, и я не имею в виду, что внутренняя доступность вообще плохая. Моя точка зрения заключалась в том, что внутренние методы в другом публичном классе кажутся мне неправильными. Правильно разработанный базовый класс не должен давать несправедливого преимущества производным классам в одной сборке.