Creo que el problema está en el getView.
Tienes todo el código que actualiza la View dentro del: if (v==null). Ahí dentro sólo debería estar el inflado de la vista, y fuera la asignación de las Views.
Al tenerlo todo dentro cuando actualizas a UserProfile no ocurre nada porque v es distinto de null, cuando cambias la orientación o vas a otra Activity y vuelves se vuelve a crear el ListView y por eso si te actualiza los valores, porque es distinto de null.