When creating an autocommand, the :au part interprets | as a command separator. Just like for mappings, you need to escape it:
au setlocal autoindent expandtab tabstop=8 softtabstop=2 shiftwidth=2 \| inoreabbrev <buffer> <expr> tds strftime("%F %b %T")
Or, use two autocommands:
au setlocal autoindent expandtab tabstop=8 softtabstop=2 ...
What you want is to run the abbreviation command only for that buffer.
autocmd FileType markdown iab <buffer> tds strftime("%F %b %T")
I've also made it into a FileType event autocommand, instead of a BufRead,BufNewFile. So it changes this stuff when filetype is set. I think it's more suitable, but in most cases won't make a lot of difference.
I got ...