Using an external pull-up resistor vs INPUT_PULLUP When would one would prefer to use an external pull-up resistor vs the internal:

pinMode(fanPin, INPUT_PULLUP);


Dredging through the forums and this site, the commonly recommended value for a pull-up resistor is seems to fall at 10K.

However, the ATmega32U4 datasheet's Table 29-1 says that RPU or "I/O Pin Pull-up Resistor" is between 20K and 50K ohms.

This question asks about internal vs external pull-ups for a simple button, but I'm asking in the general case.

What types of projects would fare better with internal pull-ups, and what type of projects would be better off with external pull-ups?

What are the considerations for preferring one over the other?

At the present, my project is hooking up an AM2302 / DHT22 temperature sensor.
There is no OUTPUT_PULLUP that I am aware of. Use INPUT_PULLUP for most things. 

Add 3.3K (3.3V) or 4.7K (5V) external pullups for I2C. If you saw a 'scope trace with 10K I2C pullup on 5V system and even short wiring, the rise time is really slow. 4.7K is much quicker.

10K for external pullup works well for slow things, like buttons, switches.  If the wire lengths are longer, then 4.7K could be used as well, maybe even 1K if the wires are long.  If running on battery power, 10K is better as there is less current flow when the input is low.