As @Juho-Kokkala and others have stated, the valid derangements are not equally likely and it is not stated in the problem what happens if the last person (H in the example) is the same as the last name in the bowl. I think it is understood from the question what happens when a person prior to the last one draws their own name: that person- and that person only- redraws and then replaces their name (that's equivalent to replacing their name and redrawing, but more efficient).
I suspect that in practice, the group would have the last person switch with the name chosen by the previous person (Person G in the example). That always gives a valid assignment because G did not pick H (so H, after the switch will have a name other than their own) and G will now have H after the switch. A second option to handle the case when the last person has only their own name to draw is to have all people put the names back in the bowl and redraw from the beginning. These two options give different probabilities and the valid derangements are not equally likely using either option.
The case of 8 names is not easy to analyze, but the case of 4 names is not too hard. This is the way of choosing the names: i) person A chooses until they get a name different than A. Each name {B, C, D} is equally likely. ii) person B chooses until they get a name different than B. If A chose B, then there are 3 equally likely choices; if A did not choose B, then there are 2 equally likely choices. iii) C chooses until they get a name different from C. iv) If D is the only name left, then D swaps names with C; otherwise D gets the last name remaining. That's option 1. Option 2 is identical until reaching step iv) which becomes: If D is the only name left, then replace all the names into the bowl and redraw from the beginning.
Option 1
There are these possible derangements with the probability of choosing that derangement using option 1 given next to each:
BADC $\frac{1}3\frac{1}3$
BCDA $\frac{1}3\frac{1}3\frac{1}2$
BDAC $\frac{1}3\frac{1}3$
CADB $\frac{1}3\frac{1}2\frac{1}2$
CDAB $\frac{1}3\frac{1}2\frac{1}2$
CDBA $\frac{1}3\frac{1}2\frac{1}2$
DABC $\frac{1}3\frac{1}2$
DCAB $\frac{1}3\frac{1}2\frac{1}2$
DCBA $\frac{1}3\frac{1}2\frac{1}2$
Then, the perfect pairings are BADC, CDBA, and DCBA and the probability of having a perfect pairing is $\frac{1}3\frac{1}3+\frac{1}3\frac{1}2\frac{1}2+\frac{1}3\frac{1}2\frac{1}2=\frac{5}{18}$
Option 2
First consider what happens in the first round of drawing (that is, when all the people have drawn a valid name until the last person's turn to draw). The probability of reaching the last person with only their name in the bowl is $\frac{5}{36}$. There are these possible derangements with the probability of choosing that derangement using option 2 in the first round given next to each:
BADC $\frac{1}3\frac{1}3$
BCDA $\frac{1}3\frac{1}3\frac{1}2$
BDAC $\frac{1}3\frac{1}3$
CADB $\frac{1}3\frac{1}2\frac{1}2$
CDAB $\frac{1}3\frac{1}2\frac{1}2$
CDBA $\frac{1}3\frac{1}2\frac{1}2$
DABC $\frac{1}3\frac{1}2$
DCAB $\frac{1}3\frac{1}2\frac{1}2$
DCBA $\frac{1}3\frac{1}2\frac{1}2$
Now, those probabilities add up to $\frac{31}{36}$. Therefore, accounting for the fact that the whole group will redraw in the cases where D has only their own name left to draw, those probabilities have to be divided by the sum in order to find the probability of achieving each derangement eventually (either in the first round or after re-starting as often as needed to get a valid derangement).
Finally, for option 2, the probability of having a perfect pairing is $\frac{\frac{1}9+\frac{1}{12}+\frac{1}{12}}{\frac{31}{36}}=\frac{10}{31}$
Back to the original question- the following R program enumerates all of the possible outcomes with 8 people and the probabilities using option 1 and then using option 2. The probability of a perfect pair is 0.006254409 using option 1 and 0.006876715 using option 2. This program only works for the case 8 people and would not be easy to adapt to the general case.
x=data.frame(A=as.character(rep("A",14833)),B=as.character(rep("A",14833)),C=as.character(rep("A",14833)),D=as.character(rep("A",14833)),
E=as.character(rep("A",14833)),F1=as.character(rep("A",14833)),G=as.character(rep("A",14833)),H=as.character(rep("A",14833)),
probinv=rep(0,14833),perfectpair=rep(F,14833),stringsAsFactors = F)
i=0
fulllist=c("A","B","C","D","E","F","G","H")
proba=7
for (a in c("B","C","D","E","F","G","H")) {
validlistb=setdiff(fulllist,c(a,"B"))
probb=proba*length(validlistb)
for (b in validlistb) {
validlistc=setdiff(fulllist,c(a,b,"C"))
probc=probb*length(validlistc)
for (c1 in validlistc) {
validlistd=setdiff(fulllist,c(a,b,c1,"D"))
probd=probc*length(validlistd)
for (d in validlistd) {
validliste=setdiff(fulllist,c(a,b,c1,d,"E"))
probe=probd*length(validliste)
for (e in validliste) {
validlistf=setdiff(fulllist,c(a,b,c1,d,e,"F"))
probf=probe*length(validlistf)
for (f in validlistf) {
validlistg=setdiff(fulllist,c(a,b,c1,d,e,f,"G"))
if (is.element("H",validlistg)) {
i=i+1
x[i,1:7]=c(a,b,c1,d,e,f,"H")
x[i,8]=setdiff(fulllist,x[i,1:7])
x$probinv[i]=probf
if (sum(x[i,rank(x[i,1:8])]==fulllist)==8) x$perfectpair[i]=T
} else if (length(validlistg)==1) {
i=i+1
x[i,1:7]=c(a,b,c1,d,e,f,validlistg)
x[i,8]=setdiff(fulllist,x[i,1:7])
x$probinv[i]=probf
if (sum(x[i,rank(x[i,1:8])]==fulllist)==8) x$perfectpair[i]=T
} else {
i=i+1
x[i,1:7]=c(a,b,c1,d,e,f,validlistg[1])
x[i,8]=setdiff(fulllist,x[i,1:7])
x$probinv[i]=2*probf
if (sum(x[i,rank(x[i,1:8])]==fulllist)==8) x$perfectpair[i]=T
i=i+1
x[i,1:7]=c(a,b,c1,d,e,f,validlistg[2])
x[i,8]=setdiff(fulllist,x[i,1:7])
x$probinv[i]=2*probf
if (sum(x[i,rank(x[i,1:8])]==fulllist)==8) x$perfectpair[i]=T
}
}
}
}
}
}
}
sum(1/x$probinv)
sum(((1/x$probinv[x$perfectpair])))
#option 2
x=data.frame(A=as.character(rep("A",14833)),B=as.character(rep("A",14833)),C=as.character(rep("A",14833)),D=as.character(rep("A",14833)),
E=as.character(rep("A",14833)),F1=as.character(rep("A",14833)),G=as.character(rep("A",14833)),H=as.character(rep("A",14833)),
probinv=rep(0,14833),perfectpair=rep(F,14833),stringsAsFactors = F)
i=0
fulllist=c("A","B","C","D","E","F","G","H")
proba=7
for (a in c("B","C","D","E","F","G","H")) {
validlistb=setdiff(fulllist,c(a,"B"))
probb=proba*length(validlistb)
for (b in validlistb) {
validlistc=setdiff(fulllist,c(a,b,"C"))
probc=probb*length(validlistc)
for (c1 in validlistc) {
validlistd=setdiff(fulllist,c(a,b,c1,"D"))
probd=probc*length(validlistd)
for (d in validlistd) {
validliste=setdiff(fulllist,c(a,b,c1,d,"E"))
probe=probd*length(validliste)
for (e in validliste) {
validlistf=setdiff(fulllist,c(a,b,c1,d,e,"F"))
probf=probe*length(validlistf)
for (f in validlistf) {
validlistg=setdiff(fulllist,c(a,b,c1,d,e,f,"G"))
probg=probf*length(validlistg)
for (g in validlistg) {
h=setdiff(fulllist,c(a,b,c1,d,e,f,g))
if (h!="H") {
i=i+1
x[i,1:8]=c(a,b,c1,d,e,f,g,h)
x$probinv[i]=probg
if (sum(x[i,rank(x[i,1:8])]==fulllist)==8) x$perfectpair[i]=T
}
}
}
}
}
}
}
}
sum(1/x$probinv)
sum(((1/x$probinv[x$perfectpair])/sum(1/x$probinv)))