GCHandle自体もGCの対象になるのなら参照を保持するためにどっかに置いておかないといけないのでは?と思いました

渡してるのはBlittableなオブジェクトではなく普通のC#のオブジェクトなので
Pinは出来ないと思います

MSDNのGCHandleの使用例だと一関数分使っただけでFreeで解放してました
この例だとスコープ抜けるまではGCHandleが有効だから問題無いのでしょうか

私のプログラムはいろいろ事情があってアプリケーション終了まで保持する必要があります

https://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.gchandle.tointptr(v=vs.110).aspx

GCHandle.ToIntPtrはオブジェクトの内部表現を返すとありますが
GCHandleそれ自体も普通にGCの対象になるのなら
GCHandleが回収された時にIntPtrの指す内容も無効になるのでは?

FatalExecutionEngineErrorが起こるとどうデバッグして良いやらわからないので
もう見たくないです・・・