Using placeholders in watchdog function
The placeholders are not supposed to be substituted in the database. 

This is because the watchdog() function can be called from anywhere, for any user, with any language. 
Mid you call t() function, which usually does the placeholder substitutions and translation, that function used the current language to translate to. Now, if you call watchdog() to log an error for user A, whose language is de, the message should not be saved to the database as the de-translated string. That is why the english untranslated strong is stored. 

When an administrator views the log (From Admin -> Reports -> Recent log items), Drupal does the translation call (t()) at that very moment. All entries will then be translated to the language the current user has configured.