Why is $node->taxonomy not populated when implementing a custom hook_nodeapi?
I think I am explaining this right, but the issue here is that hook_nodeapi() called with op = load returns a keyed array that is later on merged into the node object.  It doesn't do this in sequence and progressively build up as each module's hook is executed, eg, it doesn't modify the node object itself. Thus it does not allow other modules to look at any other extra load information from other modules until later on.

For example, taxonomy_nodeapi() called with op = load loads up the taxonomy term info and returns it as $output['taxonomy'].  So, it is never available to any other modules until the node_load() where it is then turned into $node->taxonomy based upon that key.  Here, all other modules that add to $node in the same way also add in their extra stuff. 

So yes, this is probably best described as default behavior.