I'd like to start by saying that there are no established "best practices" for writing create and update methods. There are common needs, and sometimes the library you are using will take care of certain metadata for you. Some more common examples would include:
- Updating audit fields (created/modified timestamp and user)
- Assigning the identifier
- Updating the object after any database triggers mutate data during your write (like creating a Geo Spatial point from a pair of coordinate fields)
That said, there are tools that simply return the success or failure of the action. It really depends on the interactions you want to guarantee. You may not care about the object after you write it (not uncommon in web APIs). You may need to refresh your UI afterwords in a desktop environment, so having the updated object is helpful in that case.
It's becoming more popular to "upsert" (update a record, or insert it if it doesn't exist) because that is what is useful on a good number of projects. However, it isn't something that is expected in your ORM tool.
- In the stateless web, the returned object can be wasteful
- In a desktop, it can save time
There is no one-size fits all solution, and the best practice is the one that best fits the application you are building.