Como adjetivo/numeral: concorda em gênero
Quando "meio" funciona como numeral ou adjetivo, ele concorda em gênero com o substantivo que acompanha: "meio quilo" (masculino), "meia dúzia" (feminino), "meio-dia", "meia-noite", "duas horas e meia".
Como advérbio: fica invariável
Quando "meio" modifica um adjetivo (com sentido de "um pouco", "meio que"), ele é advérbio e NÃO varia, mesmo diante de palavra feminina: "ela ficou meio triste" (não "meia triste"), "a sala estava meio vazia".
O truque
Pergunte: "meio" está acompanhando um SUBSTANTIVO (concorda) ou um ADJETIVO (invariável)? "Meio quilo de carne" → substantivo → concorda com o gênero da coisa contada. "Ela está meio cansada" → adjetivo → sempre "meio", nunca "meia".
Exemplos
Concordando: "comprei meia dúzia de ovos", "são cinco e meia", "meio litro de leite".
Invariável: "estou meio confuso", "a rua estava meio deserta", "ele é meio esquisito".
Perguntas frequentes
Por que "meia hora" usa "meia" e "meio dia" usa "meio"?
Porque nos dois casos "meio/meia" é numeral e concorda com o gênero do substantivo: "hora" é feminino, "dia" é masculino.
"Ela ficou meia irritada" está certo?
Não — o certo é "meio irritada", porque aqui "meio" é advérbio (equivale a "um pouco") e não varia.
Qual o truque rápido pra decidir?
Se a palavra seguinte é substantivo, concorde o gênero; se é adjetivo, use sempre "meio".
"Duas e meia" é sobre o quê?
Sobre horas — "meia" concorda com "hora" (feminino), por isso "duas [horas] e meia".