Это должно работать в 32-битных операционных системах:
IntPtr intPtr = (IntPtr)(int)(uint)uintPtr;
То есть, превратить UIntPtr в uint, превратить его в int, а затем превратить в IntPtr.
Скорее всего, джиттер оптимизирует все преобразования и просто превратит это в прямое присвоение одного значения другому, но я на самом деле не проверял это.
См. Ответ Джареда о решении, которое работает в 64-битных операционных системах.