Respondendo a minha própria pergunta ...:
A solução é tão simples, enquanto eu procurava código complexo para redesenhar o widget ... Tudo o que precisa ser feito é definir o membro EventBox.VisibleWindow como 'false' (é 'true' por padrão). Do que o EventBox não é desenhado e se a imagem dentro do EventBox tiver áreas transparentes, eles mostrarão o que está abaixo.
No exemplo abaixo, é:
mapBox.VisibleWindow = false;
e
pinBox.VisibleWindow = false;
Até onde pude ver, o Z-Order (no qual o Widget está no topo) é determinado pela ordem de desenho na tela (quando o EventBox não é desenhado, o EventBox.GdkWindow.Lower () ou Os membros criados () não estão fazendo nada.
Exemplo:
// Showing a map in an invisible EventBox
EventBox mapBox = new EventBox();
mapBox.Visible = true;
mapBox.VisibleWindow = false;
fixed1.Add(mapBox);
fixed1.Move (mapBox, 0, 0);
Image mapImage = new Image("map.png");
mapImage.Visible = true;
mapBox.Add (mapImage);
// Showing a pin image with transparent areas, in an invisible EventBox, on top of the map
EventBox pinBox = new EventBox();
pinBox.Visible = true;
pinBox.VisibleWindow = false;
fixed1.Add(pinBox);
fixed1.Move (pinBox, 60, 60);
Image pinImage = new Image("redpin.png");
pinImage.Visible = true;
pinBox.Add (pinImage);