What's an efficient algorithm for recovering the clock and decoding Manchester-encoded data?
That depends what you have to work with. If you're oversampling at a rate of at least 4.1x the bit rate (2.05x the max transition frequency), a simple approach is to use a state machine in which the duration of each high/low time is compared to either 1.5x the previous duration (if the previous one is thought to be 'short') or 0.75x the previous duration (if thought to be 'long'). Note that if you don't know whether you're starting with long or short pulses, you may misidentify a continuous sequence of long pulses as short, or vice versa, but the first pulse of the "other" width will be correctly recognized.
To clarify: suppose the goal is to recognize non-differential manchester-coded data encoded per IEEE 802.3. If one gets a transition after a "long" time, the state of the communications line following the transition will represent a bit of data. If one gets a transition after a "short" time, ignore it but look at the next one (which is expected to be short); the state of the line after that next transition will represent a bit of data.
For differential coding, a "long" state time represents a zero; two "short" state times represent a 1 (if a short is followed by a long, there's a communications error).