1) Контроллер - связывает UI и логику, но это не сама логика, максимум тут подготовка модели к дальнейшей передаче. GRASP - Контроллер.
2) Логику по получению, маппингу и т.п. переносим в сервис. SomeModelService например.
3) Repository - просто коллекция, никаких not_found там нет.
4) Данный сценарий как я понял обновляет существующую сущность. Значит вероятно следует добавить проверку на конкуретный доступ, оптимистический, т.к. это веб. Т.е. пусть в SomeModel будет значение версии, дата или int или что вам удобно. И хендлинг всех возможных ситуаций делайте не в контроллере а в сервисе. Т.к. UI может добавится другой.
5) Вместо конкретных репозиториев и сервисов используйте интерфейсы. SOLID, буква D. Это позволит легко тестировать приложение, и разрабатывать модули не ожидая все другие модули, которые вы используете.
Но если приложение простое, или учебное, то можно просто забить на все это, т.к. оверхед большой, и пилить как удобно. В таком случае разницы между 1 и 2 способ не много, но 1-ый чище.
Примеры всяких GetOrXXX хорошо подсмотреть у C# LINQ. FirstOrDefault и т.п.