Зачем нужен ContentProvider в единичном проекте?
да все в целом зависит от задачи.  И привычки.
Зависит от многих вещей начиная от требования и заканчивая будет ли этот код поддерживаться.
Вы можете и сделать репозиторий с прямыми SQL запросами или используя курсор. От проекта зависит.
Вы ищите уникальное решение, на все случае жизни. Но так не всегда бывает, каждая задача требует свои решения. 
Возможно конкретно в вашем случае использование контент провайдера, тоже самое что для двух страничного сайта визитки ставить битрикс.
Вы ищите уникальное решение, на все случае жизни. Но так не всегда бывает, каждая задача требует свои решения. 
+1Но тогда ведь я не смогу использовать CursorLoader c CursorAdapter. Или я ошибаюсь?
да, если поле не _id то недоступен целый ряд родных фич из sdk даже по нажатию на элемент списка вы не получите его ключ (из коробки если пк _id то при клике на элемент списка вы получите его _id)
_id по сути уже стандарт  для android, поэтому кроме случаев где по каким то очень важным причинам вам нужно назвать пк как то иначе, я бы рекомендовал все же называть пк _idНапример сделать что то типа репозитория, но только без провайдера
Конечно можно, но тогда целый ряд фич придется пилить самому
мне нравится  ContentProvider  за его простоту, но не нравится за кривое api (нет, правда, метод в котором почти все параметры частенько null в 2016 году это через чур) но его api компенсируется его стабильностью
еще раз опишу кейс его использования когда не нужно давать куда то доступ Клиент сферического интернет магазина 
для наглядности представим что  у нас планшет и что экран разделен на 2 фрагмента
первый фрагмент лента товаров
второй корзина  
(да странный ux но что поделать ....  )
в ленте пользователь жмет на кнопку добавить в корзину, при этом волшебным образом  обновляется ui во втором фрагменте при этом никакой сложной логики  реализовывать для этого не нужно  
думаю такого же эффекта можно добиться  при использовании rxjava но придется попотеть