Another partial solution, as hinted above, is to hard wire the reset to that it can only be pulsed for the minimum amount of time possible to do a valid reset. The first operation in the software code should be to set the tristates of the IO ports. If you are using a pic, it actually maintains the output data, inputs and analog inputs aren't important as all the IO revert to input states anyways, all you need to worry about is just the outputs. In my design cases, if I must, I usually have a pull-up or pull-down resistor if something needs to be forced at reset.
As for telling what state you are starting up in, PICs have a register which tells you if you just came from a power-up, or brown-out, or watch-dog timer timeout, or reset pin trigger. I'm sure other MCUs have similar power-up status registers, or I hope they do.