Ну я, например, вижу отличия:
- в протоколе, в отличие от интерфейса, возможно задание переменных, переназначаемых реализующим протокол классом
- протокол расширяем
А вообще, насколько я понял, протокол это миксин. Т.е. в нем можно прописать реализацию, в отличие от интерфейсов Java. Конечно, тут можно упомянуть статические методы в интерфейсах Java 8, но, как по мне, статические методы это зло и они должны умереть :) Я вот сейчас, наверное, разливаюсь мыслию по древу, но! Когда я читал описание Kotlin, авторы обещали "Если вам в Java что-то не нравится, то с вероятностью 50% мы в Kotlin это исправили." Опачки - подумал я, загадал static methods и checked exceptions и попал в десятку.