Документацию FieldInfo
я смог найти, не сравнивал и не противопоставлял эти два метода. Меня интересует, когда нужно использовать друг друга (желательно с небольшим фрагментом кода).
SetValueDirect принимает параметр TypedReference, и поэтому он должен использоваться, когда необходима совместимость параметров varargs. Это не делает бокс/распаковку значений и проверку доступа. Он работает быстрее, чем SetValue.
С другой стороны, SetValue работает практически во всем остальном. Он выполняет бокс/распаковку параметра, где это необходимо, а также проверяет доступ.
Есть SO, которые обсуждают TypedReferences здесь и здесь - в обоих случаях есть примеры кода.