Why do taxonomy_get_tree() & entity_load('taxonomy_term', etc..) give different counts?
After running some mysql queries on the taxonomy_term_data table it appears that the difference in counts is caused by differences in the terms language property.

When I count the terms in the taxonomy_term_data with the language set as 'und' it matches the total given by taxonomy_get_tree($vid)

When I count all terms in the taxonomy_term_data table regardless of language the total matches the the count given by entity_load('taxonomy_term', FALSE, array('vid' =&gt; $vid))

So if you only need terms in your current language go with taxonomy_get_tree($vid) otherwise you'll need entity_load().