Yes, ovr_Initialize() copies LogCallback from the ovrInitParams struct. Otherwise you wouldn't be getting any log output. You must keep a strong reference to the OVRLogCallback instance, until ovr_Shutdown() runs.
Just to be clear: what ovr_Initialize() really copies is a pointer to the libffi closure. The closure contains a JNI weak global reference to the OVRLogCallback instance. The weak reference and the libffi closure will be deallocated when you call .release() on the OVRLogCallback instance. But nothing stops the OVRLogCallback instance itself from being GCed, unless it's strongly referenced in Java code.