As promised here the the patch which solve the first part of the positioning problem.
diff -urN --exclude '*.*o' --exclude '*.in' --exclude gnome-panel-2.20.3.orig --exclude '*.rej' gnome-panel-2.20.3.orig/applets/clock/clock.c gnome-panel-2.20.3.fixed/applets/clock/clock.c --- gnome-panel-2.20.3.orig/applets/clock/clock.c 2008-01-07 22:26:27.000000000 +0000 +++ gnome-panel-2.20.3.fixed/applets/clock/clock.c 2008-12-25 14:03:50.000000000 +0000 @@ -772,7 +773,7 @@ break; case PANEL_APPLET_ORIENT_UP: - y -= h; + y -= h + button_h; if ((x + w) > monitor.x + monitor.width) x -= (x + w) - (monitor.x + monitor.width);