Это действительно ваш выбор, в зависимости от того, как вы получаете ручки. Если дескрипторы изначально встроены в некоторый управляемый объект, вы должны использовать HandleRef. Если вы получили дескрипторы от других функций PInvoke и .NET ничего не знает о них, используйте IntPtr.
Преимущество HandleRef состоит в том, что .NET обещает поддерживать объект контейнера в течение всего времени, пока существует HandleRef, но затем собирает только дескриптор функции API. В конкретном случае CloseHandle это на самом деле не имеет значения, поэтому с IntPtr все должно быть в порядке.