You need to keep your rig clean when you build it. This means transforms should be zeroed out before working on them, especially with constraints. You can clear transforms by pressing AltG, AltR, and AltS to clear translation, rotation and scale, respectively.
(1) After your transforms are clean, you can add constraints. I always recommend using local space for copying transforms, unless you have a very specific reason for using any other space.
(2) Alternatively, you can also use a combination of copy location, rotation and scale constraints to achieve the same effect. This also allows more minute control over the constrained object. Again, I suggest using local space for each transform space to keep it predictable.
(3) Yet another option is to use the child-of constraint, which essentially makes the constrained bone behave as a child. This constraint offers you the option to set an offset like you're asking about (set inverse). With this constraint, I recommend creating the two bones exactly on top of each other, meaning they originate from the same point. They will have the same pivot points, so scaling and rotation behave predictably.
(4) Copy transforms constraint is good to use if you have bones right on top of each other (ie a bone chain with a duplicate chain controlling it). This is just because it's a very simplified constraint. The transformation constraint is a decent replacement for drivers, in such a case where python execution is disabled. Child-of is a good way to get parent-like hierarchy behavior while keeping bone hierarchies separate.
(5) Make some simple bone chains and play with each type of constraint to see which fits your needs. If you absolutely need to keep transforms on the bone in question, then use the combination of constraints in (3) and enable the offset option. This takes the bone's transforms into account at constraint creation.