DATE_ADD
funciona muito bem com meses diferentes. O problema é que você está adicionando seis meses a 2001-01-01
e 1º de julho deveria estar lá. Isto é o que você quer fazer:
SELECT *
FROM mydb
WHERE creationdate BETWEEN "2011-01-01"
AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY
GROUP BY MONTH(creationdate)
OU
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
Para aprender mais, dê uma olhada em documentação DATE_ADD .
*editado para corrigir a sintaxe