Do your data always come in pairs? If yes, your code is fine. Try also
$ while read HEAD; do read DATA; [ ${#DATA} -lt 10 ] && printf "%s\n%s\n" "$HEAD" "$DATA"; done < file
>gi|bcd| Species two
ATTTGATC
>gi|cdf| Species three
ATTTGATCT
The problem with my original code was obscured by my choice of an example file with unrealistically short sequences. In reality my sequences are longer, and the problem with my code is that it captures headers along with short sequences.