No es que el menú salga en cualquier lado sino que sale desplazado de la posición donde esperas que aparezca. Prueba haciendo click sucesivamente en distintos puntos y verás que el desplazamiento siempre es el mismo.
Lo que sucede es que los eventos OnMouseDown y OnMouseUp te pasan las coordenadas relativas al control mientras que el método Popup del menú espera coordenadas relativas a la pantalla.
Así, si das el click en las coordenadas (10, 10) del control, el menú aparecerá en las coordenadas (10, 10) pero de la pantalla.
Para remediar esto basta que conviertas las coordenadas.
Por ejemplo, si el control es un ListBox:
Código Delphi
[-]
procedure ListBox1MouseUp(...);
var
Pt: TPoint;
begin
Pt := Point(X, Y);
Pt := ListBox1.ClientToScreen(Pt);
PopupMenu1.PopUp(Pt.X, Pt.Y);
end;
// Saludos