Hi Mark,
Yes, that's what was missing.
[NB: I refer to elements below. The concepts are valid for connectors and other 'things' within EA.]
Update() causes changes to an element (or a newly created element in its entirety) to be written to the schema. Until you do this any changes you've made are unavailable. You can test this be exiting from the changes before calling Update() and then reading the element. No changes (or no element at all if it was newly created).
You also used the Refresh() method. This is related but different. Once you call Update() the element is updated in the repository - the underlying EA database. In the case of a newly created element, you can now reference it by GUID, ID or whatever. However, if the element (or whatever) is part of a collection, you won't be able to find it there. Trying to iterate through the collection will fail, as if the element was never added. The Refresh() method updates the collection, so that the new element is added, the element count is updated, and methods that target the collection can 'see' the element. The same holds true for delete operations. If you change the element name you might need to Refresh() the collection, depending on whether you want to retrieve the element by name.
Remember that you call Update() on the element, but Refresh() on the collection that holds the element (i.e. this collection is an attribute of the element's parent).
Hopefully this clarifies things more than it clouds them.
David