1) С Kitkat для старта alarm в точно указанный час нужно использовать метод setExact() вместо set()
2) С Marshmallow для этих целей нужно использовать setExactAndAllowWhileIdle()
3) Если устройство уснуло то с флагом RTC alarm не стработает. Для этого нужно использовать флаг RTC_WAKEUP