Hey Patrick Firebase developer here.
In my testing on the latest SDK, unsubscribe is working for me.
FirebaseDatabase.DefaultInstance.RootReference.ValueChanged += MyHandler;
void MyHandler(object sender, ValueChangedEventArgs e) {
UnityEngine.Debug.Log("Changed!");
FirebaseDatabase.DefaultInstance.RootReference.ValueChanged -= MyHandler;
}
results in a single message even after multiple edits in the console. There was a bug on complex queries that was fixed in 1.01.
Also note that DatabaseReference objects are ephemeral in nature. This means you can subscribe to an event on one instance of a DatabaseReference and unsubscribe from another. As long as the path of the two match, the event should be unsubscribed. But otherwise, you should be able to subscribe and unsubscribe to these events just like any other C# event (so what you show is correct and should be working).
The lambda form of subscribing (in the docs) is technically bad form since you cannot unsubscribe easily. We'll see what we can do about updating the docs about unsubscribing.