Il problema era determinato dal fatto che l'input della domanda finale manteneva nel buffer il carattere di line feed e questo faceva perdere il sincronismo per le risposte seguenti.

Ma era piu' "grave" il fatto che venisse richiamata la main() alla fine per ripetere il programma. Dato che non esegui un goto, viene conservato nello stack il punto di rientro della chiamata alla funzione e questo, oltre che essere teoricamente sbagliato, puo' anche causare problemi. E un altro errore grave era la allocazione della memoria (con la malloc) senza la relativa liberazione (con la free).

In piu', ho tolto qualche confronto con valori ASCII e li ho sostituiti con i caratteri corrispondenti e ho tolto qualche parentesi { } inutili, per maggiore leggibilita'.
Le funzioni sono ottimizzabili ma questi sono dettagli.

In grassetto le correzioni ...

codice:
int main(void)
{
  int i;
  char scelta;
  char c, parola[] = "materasso";

  do
  {
     char count[2] = {'9', 0};

    char *impiccato = (char *)malloc(sizeof(parola)+1);
    strcpy(impiccato,parola);
    for(i=0;impiccato[i];i++)
      impiccato[i]='-';

    titolo();
    draw_xy(7,15,multi,impiccato);
    draw_xy(4,50,multi,"Tentativi rimasti:");
    draw_xy(4,70,multi,count);
    print_m_array(multi,W_HEIGHT);

    while(strcmp(impiccato,parola) && count[0]>'0') 		{
      printf("Inserisci un carattere [a-zA-Z0-9]: ");
      c = getchar();
      if(count_pattern(parola,c))
      {
        search_pattern(parola,impiccato,c);
        draw_xy(7,15,multi,impiccato);
      }
      else
      {
        count[0]--;
        draw_xy(4,70,multi,count);
      }
      
      c = getchar(); //to avoid entering the '\n' char
      print_m_array(multi,W_HEIGHT);
    }
    
    //Check if the user's won the game
    if(count[0]=='0')   
      draw_xy(4,50,multi,"Spiacente, hai perso!");

    if(!strcmp(impiccato,parola) && count[0]>'0')      
      draw_xy(4,50,multi,"Complimenti, hai vinto!");

    do
    {
      print_m_array(multi,W_HEIGHT);
      printf("Vuoi ancora giocare? [y/n]: ");
      scanf("%c",&scelta);
      printf("\n");
    } while(scelta!='y' && scelta!='n');


    c = getchar();
    free(impiccato);
  } while(scelta=='y');

	
  return 0;
}