Why does GAP takes this element as a generator? I was trying to find an answer to my question. In fact I want to show that in the group $G = \{a,b | a^{2n},b^4,(ab)^2,(ab^-1)^2\}$ the elements $a$ and $b^2$ commute. Therefore I tried the following:
F := FreeGroup("a", "b");;
AssignGeneratorVariables(F);;
#I  Assigned the global variables [ a, b ]
rel := [a^12, b^4, (a*b)^2, (a*b^-1)^2];;
G := F/rel;;
hom := EpimorphismFromFreeGroup(G:names:=["x","y"]);;
K := Kernel(hom);;
gK := GeneratorsOfGroup(K);
[ (y*x)^2, (y*x^-1)^2, (y^-1*x)^2, (y^-1*x^-1)^2, y^-4,
x*(y*x^-1)^2*x^-1, x*(y^-1*x^-1)^2*x^-1, x*y^-4*x^-1,
x^-1*(y*x)^2*x, x^-1*(y^-1*x)^2*x, x^-1*y^-4*x, y^2*x*y^-2*x^-1,
y^2*x^-1*y^-2*x, x^2*(y*x^-1)^2*x^-2, x^2*(y^-1*x^-1)^2*x^-2,
x^2*y^-4*x^-2, x*y^2*x*y^-2*x^-2, x^-2*(y*x)^2*x^2,
x^-2*(y^-1*x)^2*x^2, x^-2*y^-4*x^2, x^-1*y^2*x^-1*y^-2*x^2,
x^3*(y*x^-1)^2*x^-3, x^3*(y^-1*x^-1)^2*x^-3, x^3*y^-4*x^-3,
x^2*y^2*x*y^-2*x^-3, x^-3*(y*x)^2*x^3, x^-3*(y^-1*x)^2*x^3,
x^-3*y^-4*x^3, x^-2*y^2*x^-1*y^-2*x^3, x^4*(y*x^-1)^2*x^-4,
x^4*(y^-1*x^-1)^2*x^-4, x^4*y^-4*x^-4, x^3*y^2*x*y^-2*x^-4, x^-12,
x^-4*(y*x)^2*x^4, x^-4*(y^-1*x)^2*x^4, x^-4*y^-4*x^4,
x^-3*y^2*x^-1*y^-2*x^4, x^5*(y*x^-1)^2*x^-5, x^5*(y^-1*x^-1)^2*x^-5,
x^5*y^-4*x^-5, x^4*y^2*x*y^-2*x^-5, x^-5*y*x*y*x^-6,
x^-5*y^-1*x*y^-1*x^-6, x^-5*y^-4*x^5, x^-4*y^2*x^-1*y^-2*x^5,
x^6*y^-4*x^-6, x^5*y^2*x*y^-2*x^-6, x^-5*y^2*x^-1*y^-2*x^-6 ]

I see that the relators and some of their conjugates are generators of $K$ but why is $y^2xy^{-2}x^{-1}$, the commutator of $x$ with $y^2$, also a generator? 
off topic this curiousity:
Image(hom, gK);
[ (b^-1*a^-1)^2 ]

 A: In brief: The routine is generic for finding a generating set for an arbitrary subgroup. You get the result of this process (which is not aware that in this special case you can interpret it as relations).
In more detail, once you created K, lets see how GAP computes generators
gap> me:=ApplicableMethod(GeneratorsOfGroup,[K],1);
#I  Method 4: ``GeneratorsOfMagmaWithInverses: subgroup fp, via augmented coset table'', value: 37

So what gets used is an augmented coset table for the subgroup. A bit more digging:
gap> me:=ApplicableMethod(AugmentedCosetTableRrsInWholeGroup,[K],1);;
gap> Print(me);
function ( H )
[...]
    costab := CosetTableInWholeGroup( H );

So first an ordinary coset table is computed, and this uses:
gap> me:=ApplicableMethod(CosetTableInWholeGroup,[K],1);;Print(me);
#I  Method 2: ``CosetTableInWholeGroup: ByQuoSubRep'', value: 38
function ( G )
    return CosetTableBySubgroup( G!.quot, G!.sub ); 
end

So the group K is stored as "Quotient Subgroup" (my article
Representing subgroups of finitely presented groups by quotient subgroups.
Experiment. Math. 10 (2001), 369–381 describes the concept), it is the pre-image of the subgroup K!.sub under a homomorphism that maps the generators of the parent to K!.quot
gap> K!.quot;
Group([ a, b ])
gap> K!.sub;
Group([  ])

D'oh -- not a big surprise here as it is a kernel. So GAP will compute a coset table for this finite group -- essentially the regular permutation representation of this finite group.
It then computes effectively, what are Schreier generators for this coset table (i.e. elements of the form $rep_1*gen*rep_2^{-1}$) that form your list. The commutator you spot is not out of line for this form -- it could be that $rep_1=y^2$, $gen=x$ and $rep_2=xy^2$ (but I have not dug into this detail).
As for your question of Image(hom, gK), GAP here maps all generators of $K$ as a set to the image group G. It has established (as part of the prior work of determining the regular representation) a way of comparing elements of G and uses this to recognize that all elements of gK have the same image. The image therefore is a set of size 1, and GAP gives you this set with one representative  --- actually the smallest word representing any image element,a s you can test by
Set(List(gK,x->UnderlyingElement(Image(hom,x))));

GAP does not aim by default to reduce all words minimally (as this could be needlessly expensive), but you can force it to do so and then get a result you might have been expecting:
gap> SetReducedMultiplication(G);
gap> Image(hom,gK);
[ <identity ...> ]

