It seems like you have two issues. 1) generating accurate pulses below 100ms and 2) having the Arduino detect the trailing edge. The two shouldn't be related so more info would help.
As far as 1), in my experience sleeps below 100ms do tend to be inaccurate.
Could you not have the Arduino just detect the leading edge of an arbitrary length pulse and do the 50ms timing itself?