I was tempted to say that they work as expected, but you have already said that you don't know what to expect

.
A reentrant VI is one that has its own dataspace. That means that if I have two of them, they each have their own data and know nothing about each other. This is great for VIs that need to save state for some reason. Some examples of this are moving averages or some filters. They need to know values from the last time they were called in order to calculate the answer for this time and they need to keep track of this answer for use in calculations next time they are called. If these VIs had a single dataspace but were called in several places, their data from last run could be the data from the other call and therefore not be correct.
This is where reentrancy comes in. You merely make this VI reentrant and it saves state correctly because now each call has its own dataspace and therefore its own data.
Functional Globals work on the opposite principle. You want to mix the data from one call location with the data from another. You want to have it save state from this time and use that data reguardless of the caller the next time it is run. You cannot make Functional Globals into reentrant VIs.
I hope that this helped.
Bob Young