мне кажется вам надо в onTestSuccess устанавливать retryCount в 0.
по завершению теста выполняется Invoker.class (testNG)
в котором есть условие
IRetryAnalyzer retryAnalyzer = testMethod.getRetryAnalyzer();
boolean willRetry = retryAnalyzer != null && status == ITestResult.FAILURE && failure.instances != null && retryAnalyzer.retry(testResult);
которое, как я понял вызывает RetryAnalyzer.retry только при фейле теста, следовательно при Success он туда (RetryAnalyzer.class) даже не будет заходить
зы. значит счетчик тут не причем
если капнуть глубже... то после фейла теста( в этом же файте invoker.class) происходит "failure.count++"
т.е. после фела теста "failure.count=1"(изначально 0) - что скорее всего и говорит запускать тесты еще раз
и при прохождении теста со статусом success мы имеем failure.count=1 (он не сбрасывается на 0), а следовательно пройденный тест запускается по новой... вот как эту переменную бы перезаписать/сбросить на 0