The process could not execute 'sp_replcmds' on 'S15415940'. Cannot execute as the database principal because the principal "dbo" does not exist
In my experience I had this message 


  The process could not execute 'sp_replcmds'


when two log reader processes where accidently trying to run.

The fix I had was to:
 connect at the publisher, look in master..sysprocesses for a a leftover process from the distributor
 kill it, and relaunch the log reader on the distributor.