По умолчанию Ninject выберет конструктор с наибольшим количеством параметров, который имеет достаточную информацию для связывания. Поэтому, если модуль Ninject может обеспечить реализацию ISystemClock, Ninject предпочтет второй конструктор.
Шаблон, который вы здесь показываете, часто используется, когда вы хотите разрешить вводимые зависимости, но по-прежнему имеете логическое значение по умолчанию, чтобы использовать его в случае отсутствия конкретной зависимости. Как вы указали, при модульном тестировании вы можете предоставить свой собственный макет ISystemClock, который дает вам преимущество детерминированного тестирования. Аналогичным образом, если у вас была какая-то причина хотеть предоставить собственную реализацию ISystemClock, вы можете настроить модули Ninject с соответствующей привязкой.
С другой стороны, для большинства целей лучше всего использовать стандартную реализацию SystemClock, поэтому вместо того, чтобы заставлять вас устанавливать привязку ISystemClock, чтобы класс функционировал, предоставляется альтернативный конструктор, который использует SystemClock как реализация по умолчанию. Ninject обратится к этому конструктору, если вы не указали привязку для службы ISystemClock.
Редактировать
В данном конкретном случае причина, по которой он не работает, заключается в следующем атрибуте класса TimeService:
[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
Я не до конца понимаю, что здесь происходит, но это как-то мешает использовать Ninject для создания сервиса. Если вы закомментируете эту строку, она должна работать как положено.