The small diamond means that the variable is passed by reference - i.e, it can be modified in the function, and the results will be there even if it doesn’t pass it back out as a return value. A circle is a normal pass.
In this particular case, I think it’s context sensitive. Trust in the Blueprints In C++, you can define it in your function signature.
How do you switch between the two in any given situation? I never had any option for either of those nodes to make their input reference or value.
Well the same variable is plugged into both of those nodes, but whatever.
Thanks for the info.