El problema es que está insertando una referencia a $tempArray en $arr. Luego cambias la referencia. En el tercer ciclo, tiene 3 referencias a la misma matriz. Es por eso que los valores se muestran de esa manera... puedes resolver esto de una manera poco intuitiva.
prueba:
$stmt->bind_result($tempArray["val1"], $tempArray["val2"],$tempArray["val3"]);
while ( $stmt->fetch () ) {
$x = $tempArray; //This copies the values of $tempArray to $x and each loop will create a new x.
array_push($arr, $x);
}