As it was mentioned in the comments: your loop is infinite, which eventually will cause the slowdown of any computation that accumulates data in the memory. The important rule of thumb for Dynamic updating is: only update when necessary and only update what is necessary. Accordingly, you can speed up the performance of the dynamic drawing by wrapping only points and k in Dynamic. By this way, only the list of points is updated (and the label) and Mathematica does not have to redraw the whole Graphics object again and again (which involves a lot of extra computation).
points = {};
Graphics[Point@Dynamic@points, PlotLabel -> Dynamic@k]
x = .1; y = .3; K = .9;
Do[
{x, y} = {FractionalPart[x + K y], FractionalPart[x]};
points = Append[points, {x, y}];
, {k, 20000}]
Starting from @belisarius' comment, I came up with a more economic version (time scales linearly with k). If one does not have to keep all the points we can apply a reasonable resolution to bin the ranges and saving new datapoints in a matrix, overwriting previous data.
resolution = 256; (* divide the (0,1) range into 256 bins *)
array = Array[0 &, {resolution, resolution}];
Dynamic@ArrayPlot[array, PlotLabel -> Dynamic@k]
x = .1; y = .3; K = .9;
Do[
{x, y} = {FractionalPart[x + K y], FractionalPart[x]};
array = ReplacePart[array, (Min[#, resolution] & /@ (Round[{x, y}*resolution] + 1)) -> 1],
{k, 1000000}]

AppendTo[]is notoriously slow... – J. M.♦ Oct 1 '12 at 9:08