В каких случаях использовать .h и .hpp?
Технически компилятору вообще все равно какое вы расширение поставите - вы все равно указываете при инклуде полное имя с полным расширением. Поэтому ставьте как принято в вашей нейминг конвенции.
Про с++ и с - в принципе вы правы, однако это рекомендация, а не правило.
Расширение .hpp иногда используется при написании шаблонов, т.к. реализация функции класса-шаблона в отдельном файле .cpp вовлечет за собой ошибку.