¿Cómo mover un control en mousemove en tiempo de ejecución?

Tengo una aplicación WinForm, estoy tratando de mover una pictureBox en un formulario usandoMouseMove Event, pero no puedo averiguar cuál es el cálculo correcto que debo hacer en MouseMove, cuando hago la primera función de pictureBox, su ubicación cambia de forma insensata y luego, al moverla, la ubicación de pictureBox se mueve correctamente.

Es un nombre de panelOuterPanel que contiene el cuadro de imagenpicBox, aquí el código estoy usando:

private void picBox_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Point p = OuterPanel.PointToClient(MousePosition);
        picBox.Location = this.PointToClient(p);
    }
}

P.S: el objetivo es mover la imagen después de acercarse, como el visor de fotos de Windows

Actualizar : ConvertFromChildToForm método

private Point ConvertFromChildToForm(int x, int y,Control control)
{
    Point p = new Point(x, y);
    control.Location = p;
    return p;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta