What I was trying to say about enemy bullet size is that skilled players will want to be able to line up under enemies and still hit them. But they will want to be able to avoid the enemy shot by moving a little offset from the enemy's center (not moving completely to a side). This is usually possible when the player fire is wider than their hitbox. In the case of your game, the player shots are narrower than the player hitbox, so you can never really achieve what i was saying. The double shot powerup appears to give this ratio, but you still seem pretty vulnerable, because the rate the player moves is large (due to ship speed). So positioning the player is a bit tougher.
Random powerups can be handled in all sorts of ways. I prefer to make a pseudo random system, where a string contains the order the powerups spawn. Then you have a var/counter that holds the current position in the string. Every time you spawn a powerup, simple increment the position in the string (and loop back to the beginning when you hit the end of the string). It allows you to be certain that specific powerup will spawn at reasonable times. To stop players from memorizing the pattern, you can set the "current position" value to a random number at the start of the game. And you can have multiple strings that have slight variances to throw people off of memorizing one string. You might think this wouldn't appear random to a player, but no one every notices it if the string is long enough. I usually have about 20 entries int he string and that gives me good results.
The rate of powerup spawning seems good to me. It feels a bit random but I never feel like they don't appear often enough. I only feel like I get ones I don't need/want more often than the ones I do need or want.
I wouldn't change too much about your powerup spawn system yet, since that might greatly change the feel of your game. Is there another game you are using as a close comparison to what you are trying to achieve? It might help us to give feedback on how successful you are.
As for ending, I think I got to wave 16 on my best game. It was around 415k points.