Pessoal, procurei vários tópicos aqui sobre essa questão da bolinha bater entre a borda e a raquete e já estava intrigado desde o projeto no scratch, pois estava acontecendo várias vezes comigo.
A solução que eu encontrei foi verificar a direção da bolinha (se velocidade negativa - esquerda | se velocidade positiva - direita) e colocar junto ao if da colisão, assim garanto que ela vai bater na raquete apenas uma vez.
Assim mudei a função e não passo parâmetros:
function verificaColisao(){
colidiu= collideRectCircle(xRaquete,yRaquete, wRaquete,hRaquete, xBolinha,yBolinha,raio);
if(colidiu && velocidadeXBolinha < 0) velocidadeXBolinha *= -1;
colidiu = collideRectCircle(xRaqueteOponente,yRaqueteOponente, wRaquete ,hRaquete, xBolinha,yBolinha,raio);
if(colidiu && velocidadeXBolinha > 0) velocidadeXBolinha *= -1;
//wRaquete = largura da raquete
//hRaquete = altura da raquete
}
é possível ainda criar uma variável pra direção e aí então passar como uma variável.
E para garantir que a bolinha bateu na borda, também confiro se (xBolinha == 0 + raio) para pontos do oponente e (xBolinha == width - raio) para meus pontos, no lugar de usar > e <.
Testei várias vezes e não obtive o bug novamente.