По сути, предупреждение заключается в том, что когда вы передаете изменяемое поле по ссылке, вызывающий код не знает, как обработать его изменяемым образом. Для Interlocked.Increment это, вероятно, не имеет значения из-за характера метода - но тогда вам не нужно, чтобы переменная была изменчивой в любом случае , если вы используете Interlocked.
В общем, я думаю, что я бы избегал смешивания двух - если вы используете Interlocked, делайте это везде (используйте Interlocked.CompareExchange(ref counter, 0, 0)
для чтения). Я не могу сказать, что я использую volatile очень часто, лично. Для простых счетчиков я может использовать Interlocked, но я чаще использую блокировку для большинства задач.