As per OpenSocial specs, only VIEWER can be updated -- to update OWNER, you'd update VIEWER data when OWNER and VIEWER are the same user. You also don't have to go through the extra step of retrieving the UserId to do a data update (I assume you're doing that because updates to opensocial.[..].OWNER don't work?), just use the VIEWER constant.
By default, only the App's OWNER has access to the Canvas, so you can be pretty sure that OWNER and VIEWER are the same there. The other surface where it's pretty much a given they'll be the same is Home. Otherwise, just check that they're the same (the safest bet is to fetch both, and compare Ids).