I've found in my programming (without reading much of the above), that often in my UpdateEnemies or UpdateBullets functions, when I test each enemy or bullet in a for-each loop, often after I delete one I use Return to prevent trying to do something with the deleted entity. Don't do that. It seems to slow down the game, because all of the entity checks [i]after[i/] the deleted one don't get done until the next game loop because of the Return command.
I hope that made some sort of sense, and I hope it helped, too.
I hope that made some sort of sense, and I hope it helped, too.