в portal при выходе за границы канваса не учитываете размер змейки, и если при переходе сразу нажать в сторону змейка исчезает за областью канваса и там она продолжает двигаться..
//Portal
if (pX < 0) {
pX = canvas.width-cell;
} else if (pX > canvas.width-cell) {
pX = 0;
}
if (pY > canvas.height-cell) {
pY = 0;
} else if (pY < 0) {
pY = canvas.height-cell;
}