Aún sigo con la duda del por qué usar Visible = False y True seguidos...
El problema si no me equivoco es que en el evento
CellContentClick tu instancias a
FrmAsignacionPerfilEspecial que supongo es el
formulario 2 verdad?
Al instanciarlo obviamente se borra el valor de la caja de texto porque se llama al método InitializeComponent que vuelve a dibujar todo...
Para evitar esto tendrías que acceder a este formulario de otra forma:
Primero para llamar al formulario
FrmCargaGrillaEmpresa lo haces de esta forma:
Código vb.net:
Ver originalDim f As New FrmCargaGrillaEmpresa()
Me.AddOwnedForm(f) 'Le indicarás que el formulario 3 será el padre de este.
f.Show()
Luego para darle los valores a los demás textbox lo haces así:
Código vb.net:
Ver originalCtype(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
Ctype(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
Ya no uses el visible = false / true, a menos que esto afecte a tu proceso, cosa que dudo mucho por la forma como está.
Espero que esto te sirva, cualquier duda me avisas

PD: Creo que te evitarías todo esto si usaras formularios modales. (o sea el método ShowDialog en vez de Show)