Это по замыслу. Служба SSIS отправляет данные порциями (буферы в терминологии служб SSIS), чтобы оптимизировать использование памяти. Размер буфера ограничен, поэтому SSIS не должен считывать все данные в память (иначе SSIS не сможет обрабатывать терабайты данных). Таким образом, вы можете получить несколько вызовов ProcessInput - один вызов ProcessInput на буфер.
Кроме того, вы получите один пустой буфер с флагом EndOfRowset, установленным в true в самом конце. Но не полагайтесь на это - это больше подробности реализации (последний буфер задокументирован как EndOfRowset = true, но не задокументирован как пустой)