Então, quando você está vendo as entradas de log, está vendo as informações esperadas, mas o tráfego ainda está chegando em algum outro lugar? Onde está acabando? Além disso, por que duas entradas de persistência para a mesma sessão? Isso pode confundir o sistema.
Você não deve precisar de um perfil de persistência atribuído ao Virtual, o iRule deve substituí-lo de qualquer maneira, se você tiver persistência configurada lá. Como são suas entradas de log? Além disso, você já postou no DevCentral? Mais pessoas com experiência em F5 podem vê-lo lá. - link
Já tentou alterar os nomes das variáveis? Você está usando "sessionID" como o nome da variável nos dois casos. Variáveis dentro de iRules são baseadas em sessão, o que significa que, durante a duração da sua sessão com o sistema, as variáveis permanecem fixas na memória. Se você tiver as duas iRules em execução, estará sobrescrevendo o mesmo nome de variável com dados para a solicitação e a resposta, o que poderia fazer com que sua lógica verificasse se o sessionID está vazio. Ou seja, se o sessionID for definido a pedido, mas não a resposta, mas a resposta executar a verificação de código para ver se está vazia ... não vai falhar da maneira que você deseja. Nomes de variáveis diferentes são boas.
Fora isso, sua sintaxe está correta e, a menos que o problema esteja causando confusão, parece que o problema não é com as próprias iRules, mas com a maneira como a persistência está interagindo com as solicitações.
Colin