I'll try to get you a patch to try by the weekend. 
Here is a patch from a different thread about the same problem. Both
threads where going on at the same time and I confused the two. I
assumed it went to XEmacs beta but I now see it didn't :-(
The patch probably fixes the problem in the wrong place, but I have
been using it for 2.5 months now with no problems. I hardcoded the
keysyms since older versions of XFree86 will not have these
keysyms. They are just the SwitchVT keys.
Cheers,
   Sean
Index: event-Xt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-Xt.c,v
retrieving revision 1.47.2.3
diff -u -r1.47.2.3 event-Xt.c
--- event-Xt.c	2002/12/12 06:21:32	1.47.2.3
+++ event-Xt.c	2003/06/22 04:11:29
@@ -1253,7 +1253,26 @@
 		KeySym bot = XLookupKeysym (ev, Mode_switch_p ? 2 : 0);
 		KeySym top = XLookupKeysym (ev, Mode_switch_p ? 3 : 1);
 		if (top && bot && top != bot)
-		  modifiers &= ~XEMACS_MOD_SHIFT;
+			// SAM
+			switch(top) {
+			case 0x1008fe01:
+			case 0x1008fe02:
+			case 0x1008fe03:
+			case 0x1008fe04:
+			case 0x1008fe05:
+			case 0x1008fe06:
+			case 0x1008fe07:
+			case 0x1008fe08:
+			case 0x1008fe09:
+			case 0x1008fe0a:
+			case 0x1008fe0b:
+			case 0x1008fe0c:
+				break;
+			default:
+				modifiers &= ~XEMACS_MOD_SHIFT;
+				break;
+			}
+		    //SAM
 	      }
 	    emacs_event->event_type	     = key_press_event;
 	    emacs_event->timestamp	     = ev->time;