Having resolved this apparent OCI bug (by way of manually copying all collection elements after calling TOracleObject.Assign), I've run into a stumbling block. If I have a table collection with an element type of BFile, I can not copy the element if it is not null (SetElement will not write BFILE elements of course).
This is not an urgent issue, and I know SetElement should not be changed to allow BFILE's to be written in to an element, but it does increase the urgency of resolving the original problem.
My initial suggestion (unless the reason for the failure of OCIObjectcopy can be determined) would be to modify the Assign method so that it copies the elements for collections. BFILE elements could then also be copied, and SetElement can stay how it is ...