[...] the reason is very likely that log statements are somehow batched for performance reasons (e.g. only putting out logging "once per frame" which would mean all log-statements from one frame are sent to the console in a single step [...]
Can anyone comment on that?
Are there any other pitfalls to be aware of?
Like one of these not producing any output under particular circumstances or something?
There is no functional difference between Debug.Log() and print(). print() simply wraps the Debug.Log command, and is in effect just an easier-to-remember alias to the same command. Because it's a function on the MonoBehaviour class, it means that it does not need to be preceded by an object reference when writing monobehaviours.
Whether or not Debug.Log messages are batched in builds to improve performance (I don't know about that), it's best to completely remove them once you're happy with your final build - particularly any which are printed during you game update functions!