Alarm Manager Notificando em Horários errados

Seguinte, eu desenvolvi um app que lista e compara resultados de loterias. Até aqui tudo bem. O problema está na parte do código que trata das notificações. Os resultados das loterias Caixa sempre saem as 20:00, para prevenir problemas causados por atrasos da caixa para atualizar os resultados, eu agendei um AlarmManager para as 21:(Número randômico entre 00 e 20). Como o app precisa de internet para rodar o Service que verifica se há ou não novos sorteios, eu coloquei um if que checa a conexão. Caso haja conexão o servidor é iniciado, caso contrário o app agenda para uma hora adiante. Caso não haja conexão novamente vai agendando para mais uma hora adiante, fazendo isso num total de 5 reagendamentos. Bom, já que a situação está bem explicada agora vem o problema de verdade: o app está mandando notificações em horários totalmente irregulares (rindo para não chorar), eu tentei achar um padrão nos horários mas não encontrei, por isso vim até aqui pedir ajuda. Segue o código com notas:

//Método que define o horário

public long getTime() {
        Calendar c = Calendar.getInstance();
        Random r = new Random();
        int random = r.nextInt(20);
        Log.i(TAG, "Número aleatório: "+String.valueOf(random));
        c.setTimeInMillis(System.currentTimeMillis());
        c.set(Calendar.HOUR_OF_DAY, 21);
        c.set(Calendar.MINUTE, random);
        Log.i(TAG, "Agendado para: " + c.getTime());
        long time = c.getTimeInMillis();
        return time;
    }


//Método que agenda com repeat
public void agendandoComRepeat() {
        long INTERVAL_FIFTEEN_MINUTES = 15 * 60 * 1000;
        long INTERVAL_HALF_HOUR = INTERVAL_FIFTEEN_MINUTES * 2;
        long INTERVAL_HOUR = 2 * INTERVAL_HALF_HOUR;
        long INTERVAL_HALF_DAY = 12 * INTERVAL_HOUR;
        long INTERVAL_DAY = 2 * INTERVAL_HALF_DAY;
        Intent intent = new Intent("NOVO_SORTEIO");
        intent.putExtra("Vez", 0);
        AlarmUtil.agendarRepetindo(this, intent, getTime(), INTERVAL_DAY);
        Log.i(TAG, "DetalhesSorteio.agendadoComRepeat");
    }

//Classe do receiver ativado pela intent "NOVO_SORTEIO". Coloquei ela inteira por segurança.
    public class NotificationReceiver extends BroadcastReceiver {
        private static String TAG = "Sorteado";
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(TAG, "AÇÃO DO RECEIVER:" + intent.getAction());
            ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
            Bundle args = intent.getExtras();
            int vez = args.getInt("Vez");

            if (isConnected) {
                Log.i(TAG, "Há conexão, iniciando o service normalmente");
                context.startService(new Intent(context, NotificationService.class));
            }
            else {
                if (vez < 5) {
                    Log.i(TAG, "Não há conexão, agendando para depois...");
                    vez++;
                    agendandoPraDepois(context, vez);
                }
            }
        }

        public void agendandoPraDepois(Context context, int v) {
            Intent intent = new Intent("NOVO_SORTEIO");
            intent.putExtra("Vez", v);
            AlarmUtil.agendar(context, intent, getTime());
            Log.i(TAG, "DetalhesSorteio.agendado");
        }

        public long getTime() {
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(System.currentTimeMillis());
            c.add(Calendar.HOUR, 1);
            Log.i(TAG, "Agendado para: " + c.getTime());
            long time = c.getTimeInMillis();
            return time;
        }
    }

A Intent inicial do método que agenda com repeat tem uma int como extra que é utilizada depois para tratar dos loops caso não haja internet. Isso é tudo.