I've thought long and hard about these possibilities and I've also thought about possibly generating a vertex map of the entire map and saving it into a data file ('compiling' the map's passability into a vector-based map of sorts), using it throughout the game via a sort of 2D bitwise ray tracing.
Basically what would happen is when you need to check the passability of a move from point A to point B at X pixels away, you'd trace a line from each of the player's 'front' pixels to the final tile's, gather the map's bitwise values, bitwise AND them with the player, then calculate an average of how many pixels the player will collide with, and if less than a certain value then allow the move. (Not quite sure I explained my ideas too well here, reaaaaaly tired right now)
Another thing to think about when calculating pixel-based collision is where the player stands. Literally. The collision should happen sort of like a sprite's bush depth does, with the lower half of the sprite being taken into consideration. You can, in almost 85% of cases, ignore the top half of a sprite with collision detection. This eliminates half the amount of calculations we are expecting.
EDIT: This includes the player and event graphics, and layer 1-2 tiles as well (like the fences, etc); you can calculate their bitwise collision maps and 'compile' them into a file for a faster system. The only downfall to this is when you change the maps themselves, they'll need to be recompiled, but that shouldn't take but a few seconds to calculate (depending on size of project).
With that, good night x__x