Q:

Calling save on doc with _id is calling insert

I have the following document:
{ 
  _id: 552bdc73789d083b15e3d6d5,
  username: 'test',
  firstname: 'test',
  lastname: 'test'
}

When I call save on that document mongoose is running an insert. 
This causes mongo to throw a duplicate key error for the _id field since it already exists. 
Any idea why mongoose would be calling insert on a doc that already exists that I retrieved from the db? 
EDIT:
Using mongoose 4.0.2 and mongo 2.6. 
Here is how I retrieve the doc:
var getUserByUsername = function(username, callback) {
  User.findOne({username: username.toLowerCase()}).exec(function(err, user) {
    callback(err, user);
  });
}

Then sometime later I call save on that user object:
var updateUser = function(user, callback) {
  user.save(function(err) {
    if (err) {  // this is where I see the error
      console.log('Could not update user ' + user.username + ' error ',  err);
    }

    callback(err, user)
  });
}

EDIT 2:
How I really retrieve the doc:
   Other.findOne({name: name}).populate({path: 'userId', options: {lean: true}}).exec(function(err, token) {
       ...
    }

lean populate on userId to populate the user seems to be the problem. 

A:

The problem was lean option in a populate further up the stack.   Thanks @JohnnyHK for showing me the way, I started going up checking isNew until I found the problem. 
The original query in question that started the problem:
Other.findOne({name: name}).populate({path: 'userId', options: {lean: true}}).exec(function(err, token) {
       ...
    }
At that point I had a lean user.   That use got passed along and I try to update it at a later time. 
At least as of 4.0.2 is a document is lean (not a mongoose object), even if it has an _id save() will not work.  I am sure this is as expected and my code has been changed, removing the lean query.