Почему это было добавлено? Как это лучше, чем, скажем, Task.FromResult(whatever)?
Ответ 1
Task.FromResult(whatever) работает для Task<TResult>, но до 4.6 не было ничего для неживой задачи. Вы можете использовать FromResult с фиктивным значением и неявно использовать его для Task, но это несколько затуманивает намерение (вы действительно не возвращаете какое-либо асинхронное значение) и выделяете объекты под ним (тогда как CompletedTask можно кэшировать и совместно использовать между всеми абонентами).
Необычно видеть пользовательские статические завершенные задачи в текущих (4.5.2 и более старых) кодах, поэтому, на мой взгляд, имеет смысл включить его в саму структуру.