Чтобы фрейм UIImageView совпадал с размером изображения, вам нужно получить размеры UIImage. На практике получайте соотношение сторон UIImage, и ресайзите фрейм с этим соотношением.
Теперь картинка всегда будет вписана в фрейм.
Подумайте, это логично, подгонять фрейм под картинку, а не картинку под фрейм, если вы используете .scaleAspectFit.
Закругляем углы
Теперь, когда фрейм имеет те же размеры что и картинка, округление углов будет работать корректно. Проблема решена.
Тени
Зависит от способа. Если активируете маску, то тени не будет видно. Делайте контейнер, в который помещаете UIImageView, для нее ставите маску. А тень ставим контейнеру.