In deiner fg_beschreibung_CellDoubleClick Methode erzeugtst du ein neues frm_main. Das ist eine andere als die die gerade angezeigt wird.  
Sauber wäre wenn du im CellDoubleClick einen Event wirfst denn die originale frm_main fängt und von dort dann die Anzeige aktualisiert. Dann brauch deine 2.te Form auch frm_main nicht kennen und bleibt universell einsetzbar.
Die billige Lösung wäre den übergeben Owner, denn hast du beim Show der Form übergeben, wieder auf die tatsächliche Form zu casten.
		                     
             C#-Quelltext
                        C#-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | private void fg_beschreibung_CellDoubleClick(object sender, DataGridViewCellEventArgs e){
 frm_main tmp = this.Owner as frm_main;
 if(tmp != null)
 {
 tmp.s_artikel = fg_beschreibung.Rows[e.RowIndex].Cells[0].Value.ToString();
 tmp.Anzeigen();
 }
 Close();
 }
 | 
		
	  
PS: Wenn ich mir was wünschen darf bitte das C# Namensschema angewöhnen. Typen in Groß, Methoden in groß, Variablen in klein. Und niemals nicht Unterstriche sondern Dinge in CamelCase bzw. in PascalCase benamsen.