Я не могу ответить на все ваши вопросы, но здесь идет
2) Вы используете 32- или 64-разрядную версию Windows? Похоже, вы запускаете большой процесс с поддержкой адресов с доступом к 3 ГБ (т.е. в 32-битной Windows). В любом случае вы должны иметь в виду, что память распределяется по частям разного размера, и использование вашей кучи - не единственный источник. Сам CLR имеет множество структур, каждый поток имеет стек и так далее. В любом случае, вы не можете ожидать, что сможете использовать ровно 3 ГБ,
3) BSOD вызван ошибками драйвера или ядра. AFAIK ваше приложение не может вызвать BSOD, так что это, скорее всего, не связано.
4) Если вы используете много памяти, GC будет трудно справиться. Поскольку пользовательские потоки приостанавливаются во время работы определенных частей GC, это значительно замедлит работу вашего приложения.