Well, sounds like you need to make Portfolio or Fund immutable.
Make all the properties ReadOnly and pass in the values via a Constructor.
As an added convience, add a Clone() Function or Copy Constructor.
This will stop updates to individual properties and keep everything consistent.
Public Class Fund
Public ReadOnly Name As String
Public ReadOnly Amount As Decimal
Public Sub New(ByVal name As String, ByVal amount As Decimal)
Me.Name = name
Me.Amount = amount
End Sub
Public Sub New(ByVal copyOf As Fund)
Me.Name = copyOf.Name
Me.Amount = copyOf.Amount
End Sub
End Class
This creates a nice thread safe class.
However, if you do need read/write properties, then make them so but still pass in a copy to AddFund. Say:
AddFund(New Fund(fund))
I am not sure why you just cannot use temp variables in the function either
instead of updating the object, but without the reat of the code its difficult to see whats going on.