ERm, I think I fixed it? I sped everything up by a lot because it takes soooooooooo long to test so I don't know if that's affected anything at all but....
Event 17 in your cut-down example, I changed "For each AppleTree" to "For each FireCloak" - since you are wanting to check each firecloak and find the corresponding TREE that goes with the cloak ID. The way you had it, you were basically telling it if the tree.ID is equal to itself, then do stuff. Now, by changing the loop object to the cloak, it's using that as the comparison.
Hopefully that has actually done it. Go ahead and change event 17 loop object from tree to cloak and see if it works for you too