Returning BindingList
Is one version any better than the other? 


It depends on what you actually want. 


V1 is a single time operation. The table is going to be filled only once and subsequent calls will use cached data.
V2 on the other hand will be executed on each acceess.


One cannot say which one is to chose. You must know what would work better for you.




  Is there anything one version does that another does not? 


Yes. V1 will get data only once and V2 everytime. This means that it might be acceptable to let the first property be a property because subsequent calls will be fast and only the first time initialization might take some time (depending on how much data it needs to get). The value it returns is stored in a backing field and it returns the same value everythime.

The second solution on the other head clearly behaves like a method because it can return different lists on each call thus I would make V2 a method.




  How do I get a better feel for what is going on?


This if is the answer:


if (_tableTypeList == null)
{
    var temp = TableTypes.OrderBy(t =&gt; t.ID);
    _tableTypeList = ((IListSource)temp).GetList() as BindingList&lt;TableType&gt;;
}






  I was surprised to find that another call to TableTypesList1 did not call the getter.


It probably did but when you put the breakpoint inside the if it's obvious that this block won't be called again.