When you create a new PortRange instance there is a check to control if the lower port is smaller that the high port but this check is not done at the High property. I think It should be.
Another question, why PortRange and FTPConnection use the INotifyPropertyChanged methods without implementing the interface? And why they raise those events? What is their purpose?
Another bug (I'm working at the code and I post the error when I find it): The property UseOSAssignment sets always the PortRange to default, even when you put UseOSAssignment = false; The value of the property is not checked at the property set code. What action is expected to do when you put false on that property? I think a better way would be set the property readonly and create a SetToDefaultRange() method.
Thanks for you effort on the library.