You're most of the way there.
When you use the Array modifier with an object offset, the offset between the first array element and the controlling object will be added to each subsequent element. The offset in translation is the move between the pivot point of the controlling object and the pivot point of first element.
The elements are not rotating around the empty. Each element is rotating around the previous element, (by as much as the first element is rotated with respect to the empty). Each element is to the previous element as the first element is to the empty.
You don't want any translation. You only want rotation. so the pivot point of the cone must be where the Empty is. Hit CtrlA > to apply the location: put the pivot point of the cone where the empty is, at the world origin.
Now to change the radius of the circle of cones .. don't move the pivot point of the cone - move its mesh, by selecting all its vertices in Edit Mode, and moving them.
To move the circular array of cones without screwing them up, you have to maintain the relationship between the first element and the empty.
The easiest way to do this is: select the cone, then the empty, and hit CtrlP > 'Object' to make the empty the parent of the cone (array). Now when you move the empty, the circle of cones moves too. You can still screw the array my moving the cone, so to be safe, lock all its transforms with the little padlocks in the Transform panel of the N properties region on the right of the 3D view.