Ich sehe schon das Problem. Du definierst in Deiner Paint-Funktion ein neues Polygon. Jedesmal, wenn Du move aufrufst, ruft dies wiederum Paint auf, welches ein neues Polygon zeichnet.
Lösung? Überdenke Dein Klassendesign. Wenn ich Du wäre, würde ich das Polygon selbst im Konstruktor definieren. Dann kannst Du im Canvas selbst das Objekt so übergeben:
Code:
MyCanvas.Children.Add(new tester());