Вы не сделали перегрузку функций. Перегрузка, это когда название функции и возвращаемый тип остаются, а меняются только аргументы и их количество
Должно быть что то такое
fun register(listener: ChangeListener<TaskDTO>)
fun register(listener: ChangeListener<PlayerDTO>)
Тогда в коде вы вызываете функцию register, а под капотом оно вызывает подходящую за типом аргумента