(Descargo de responsabilidad en caso de que no sea dolorosamente obvio: soy muy n00b, especialmente cuando se trata de comprender los transistores).
Pensé que lo tenía todo resuelto: un MOSFET de canal p es (o puede usarse como) un interruptor de lado alto para una fuente de voltaje diferente a la que está funcionando mi MCU. Para probar mi comprensión, reuní lo siguiente en una placa de pruebas:

simular este circuito : esquema creado con CircuitLab
El código en U1 (un arduino de 5V) me permitió conducir la línea alta o baja, o ponerla en un estado de alta z para simular los 3 escenarios. Esperaba que conducir la línea baja iluminaría el LED a 9V, y conducirlo alto apagaría el LED (0V en el drenaje del mosfet). Lo que realmente sucedió fue que no había luz en absoluto y que el drenaje tenía un voltaje de 6V (5.9V). Estoy bastante confundido, ¿qué está pasando aquí?
Aquí está el mosfet que estoy usando: https://www.sparkfun.com/datasheets/Components/General/FQP27P06.pdf
Está destinado a ser controlado incluso por un nivel lógico de 3.3V, por lo que 5V debería estar bien.


