Hola.
Me incluyo por aquí para comentarte un par de cositas. ¿Para qué sirve esto?
Quiero decir, estás recorriendo el array para obtener la cuenta, que guardas en $cuenta, pero luego no la utilizas nunca porque utilizas la función array_count_values. O sea, o te sobra este código que te he puesto (que no estás utilizando para nada), o te sobra contar los valores con array_count_values.
Otro detalle más aquí. La función rand devuelve un int, por tanto ese if ($num=="2") no necesita las comillas, te sirve con if($num==2). ¿Por qué te funciona? Porque como no es una igualdad estricta (estás utilizando == y no ===), el número 2 lo considera igual al string "2", pero no necesitas hacerlo así. Compáralo con el 2 simplemente.
Por último, puedes mejorar el rendimiento haciendo la cuenta del nº 2 en el primer foreach y así no necesitas ni recorrer el array de nuevo (lo que haces con $cuenta) ni utilizar array_count_values que internamente recorrerá el array de nuevo. Es decir, te vale sólo así:
O sea, en una pasada del foreach generas el número aleatorio, lo imprimes y, si $numero[$i] es igual a 2, entonces incrementas la cuenta. Así ya tienes la cuenta sólo iterando una vez el bucle. Mucho más eficiente y no necesitas hacer más iteraciones.
Simplemente por ayudarte a ver que puedes juntarlo todo en una iteración además de que vieras que contabas dos veces cuántos doses había.
P.D.: También te he cambiado el echo, poniendo comillas simples y así puedes imprimir las comillas dobles sin necesidad de la barra de escape.
-----------------------------
Aprende la programación desde una perspectiva básica y simplista en
Programación Básica