O UID permanecerá o mesmo para sempre, desde que o UIDVALIDITY não mude (é muito raro o UIDVALIDITY mudar)
O MSGNO (sequência de 1 a "EXISTS") é local para essa conexão específica. Se o cliente abrir várias conexões, o MSGNO poderá ser diferente em cada uma delas.
Dito isso, o MSGNO e o UID são sempre classificados da mesma maneira. Um MSGNO superior sempre será mapeado para um UID maior.
Alguns comandos IMAP podem fazer com que o MSGNO mude - mas você sempre verá um resultado EXPUNGE informando qual foi removido - todos os números mais altos diminuem em 1 nesse ponto. Se novas mensagens forem adicionadas, você também receberá EXISTS atualizados para informar quantos.
(tudo isso muda se você "ENABLE QRESYNC" e o servidor o suporta - mas são as regras do IMAP básico).
Como Janne apontou nos comentários - o RFC3501 contém todos os detalhes sangrentos sobre quais comandos podem alterar o MSGNO e quais devem preservá-lo, mesmo que alguns MSGNOs apontem para mensagens expurgadas.
Resumindo: se você estiver interagindo em diferentes sessões ou diferentes conexões na mesma sessão, use as variantes de UID dos comandos e estará seguro.