Eu acho que você está certo de que está sobrepondo os remapeamentos, então mapeia para um, então prossegue e mapeia de volta para o primeiro. Você pode resolver isso colocando um return
após cada comando send
.
$PgUp::
Send {RShift}
Return
$RShift::
Send {PgUp}
Return
$End::
Send {PgDn}
Return
$PgDn::
Send {Right}
Return
Isso acaba fazendo com que todo o script pare de remapear depois de atingir o return
até que a próxima tecla seja pressionada.