You're right. Its seems that the internal calls happen in the context of whatever app/user called them, thus inheriting their rights and privileges.
I can't decide if this is a bug, but honestly I would prefer if we could somehow be able to perform the operations by specifying the context that the call is to be executed. Maybe there is a way to do that, but unfortunately don't know it!