Premetto che non sono molto esperto in c sharp , ma con un po di logica una soluzione
potrei dartela!

primo problema , su form1 usi il metodo dispose() ,ne segue che gli oggetti del form1 non
esistono più , quindi diviene impossibile passarli .
usare al posto di dispose la propieta del form visible e inpostarla su false , il form scompare
ma "esiste ancora".

crei nel form2 , un metodo pubblico che riceva come parametro un oggetto webbrowser,
nel corpo del metodo , inserirai questo oggetto nel form2.

ESEMPIO CODICE Form1

codice:
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.Show();
            Form2 c = (Form2)Application.OpenForms["Form2"];
            c.prova(this.webBrowser1); //metodo pubblico della classe Form2
            this.Visible = false;

        }
ESEMPIO CODICE Form2
codice:
 public void prova(WebBrowser a)
        { 
              a.Location =new Point(0,0);
              this.Controls.Add(a);
        
        
        
        }

P.S.
ma se nel form1 il webbrowser non serve a niente , passa solo i dati urls al form2