"For some reason procedures can only use the priviliges granted to the owner that are not in roles."

that's because of early binding, and the way explicitly granted privileges are evaluated at run time, and the ways roles can be set on/off.