I found a solution and it was far simpler than I thought it would be. In the onChanged callback, if the index of the active text is -1, it hasn't been added to the list yet. So to distinguish between typing and selecting from the drop-down list, this does the trick:

	void onChanged(ComboBoxText cbt)
	{
		if(getIndex(getActiveText()) !is -1)
		{
			writeln("this is a list item: ", getActiveText());
		}
		else
		{
			writeln("and this isn't: ", getActiveText());
		}
		
	} // onChanged()

I just wasn't working with all available data.