Hola Anton, me alegro que lo consiguieras.
Al principio de tu post dijiste que quieres guardar esa imagen, luego te surgió lo de girarla. Por tanto la tendras que volver a guardar una vez girada, asi que podrias mejorar un poco mas el codigo y el uso de memoria. Como te comenté la carga normal consume mucha memoria, y ya viste el post de José que le cargaba la imagen y al girar el dispositivo le daba un outofmemory, por que volvia a cargarla y eran dos cargas por volver a entrar en Activity_Create.
Cambia el que te devuelva el bitmap por un boolean, de esa forma sabras si debes pintar la imagen original o la rotada, y en el caso de que asi sea, carga el imagenView en modo InitializeSample, de esa forma tendras menos problemas de memoria.
Y si quieres reaprovechar todo el codigo para el futuro, crea un sub que le pases dir y nombre de imagen y te devuelva la rotación (cero si no hay), cuando salgas de ese sub descarga los bitmap que hayas utilizado.
Crea un sub que te guarde la imagen con la rotación que le pases, cuando salgas de ese sub descarga los bitmap que hayas utilizado. (tambien puedes crear en el mismo sub de rotación que la guarde)
De esta forma, cuando tengas que hacer otra aplicación no deberas de generar de nuevo código concreto, copias esos sub y listo, su tratamiento será como "una caja negra", pasas datos, hace cosas y devuelve algo (o no) sin preocuparte como lo hiciste.
Saludos