Problemet er, at du indsætter en reference til $tempArray i $arr. Så ændrer du referencen. Ved den tredje sløjfe har du 3 referencer til det samme array. Det er derfor, værdierne viser sig på den måde... du kan løse dette på en ret ikke intuitiv måde.
prøv:
$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);
}