In order to achieve better performance when testing for collisions, checking for surroundings and nearby agents, you have to keep track of an agent's location on the map (so you don't get to check each cell to see who's in it, you just pick an agent and check the other cells surrounding him up to a given range).
Unless you have a pre-processed list of agents to work with and their location, it will be handy to keep the location at agent-level too. You don't want to lessen the advantage you've got in the previous paragraph by going through the grid to see where your agent you want to check the surroundings for might be positioned.
You don't necessarily have to store raw positions in both places. The map could simply use pointers to agents, which store their own location. This way there's just one position, and the map references it.
private Agent agentsInside; // Keeps track of all the agents in this
// cell. If one moves away, it gets
// deleted, and the new cell starts keeping
// track of it.
Since you're on a 2D grid dealing with moving agents that can collide, you might be curious to also read more on the topic. With the fixed-size cell approach, Bin Partitioning could be a good place to start.