Короче говоря. Нет надежного способа запустить какой-либо процесс и убедиться, что он может только читать, но не записывать файлы.
При создании процесса возможность доступа к файлам действительно контролируется ОС. А именно с помощью различных токенов, связанных с процессом, и их соответствующих уровней доступа. Это концепция безопасности Win32.
Теперь вы можете начать процесс с совершенно разными учетными данными. Имея достаточный контроль над средой, вы можете гарантировать, что эти конкретные учетные данные не смогут записываться на диск, но это было бы очень экстремально и потребовало бы гораздо больше работы, чем, я думаю, вы ищете.
Модель безопасности CLR вам не поможет. Конечно, вы можете поиграть и убедиться, что чисто управляемые процессы не могут получить доступ к файлам. Однако вы не можете гарантировать, что Process.Start действительно запускает управляемый процесс или что управляемый процесс, следовательно, не вызывает PInvoke в собственный код, который записывает в файл.