IndexOf checks the reference, so if the items in otherListOfMyObjects don't reference the same exact objects in memory as myListBox.Items, then IndexOf won't work.
What you could do is use linq. Here's some pseudocode that looks like C#, may compile and may actually work:
var items = from x in myListBox.Items where otherListOfMyObjects.Any(y => y == x /*SEE NOTE*/) select x;
foreach(item i in items)
myListBox.SelectedItems.Add(i);
Obviously, that won't work as y==x will always return false (that's why your current method won't work). You need to substitute y==x to perform an equality comparison that will determine equality as YOU define it for MyObject. You can do this by adding an ID as Fallen suggested or by overriding a buttload of methods as Neil suggested (+s for both of them), or by just determining which properties of MyObject to check in order to identify them as exactly the same object.