Register Allocation and Definition of Interference
Your "reading" of the definition is a little unclear. In particular, it says nothing about the values of the variables. Here's a clearer reading:


  A variable $x$ interferes with a variable $y$ if 1) they are not the
  same variable, i.e. a variable never interferes with itself, and 2) there
  is some instruction other than $x := y$ where $x$ is overwritten while
  $y$ is live at the end of the instruction (and typically also
  during, but a multiple assignment instruction like $(x,y):=(a,b)$ would be an example where variables can interfere even though $y$ is not live during the instruction).


As the book points out immediately after that definition, if $x$ and $y$ have the same value (for some stretch of code), then there is no reason they can't be held in the same register (in that stretch of code). This is what makes ignoring $x := y$ instructions valid. The analysis does not calculate the values of anything however. $x$ and $y$ interfere in $\{x := k;y := k; f(x,y)\}$ and so will be assigned different registers. For this analysis to exploit the fact that they have the same value, a prior optimization pass would need to rewrite it to $\{x := k; y := x; f(x,y)\}$.

Your definition is also incorrect. The $gen$ set of $x := k$ is empty, but certainly two variables can't share a register if one is being mutated and the other isn't. Again, as the book points out immediately after the definition, the definition is close to saying that distinct variables $x$ and $y$ can't both be live at the same time. (Both being live at the same time would be formulated as $x,y \in out[i]$.) This is a more conservative condition than yours, but it is still incorrect for the same reason. If $x := k$ is the last occurrence of $x$, and thus isn't in the $out$ set of that instruction, it still interferes with $y$.