letsimp is confused by the presence of debugging data (lineinfo) in expression cars. Lineinfo is introduced by reading expressions from a script instead of entering them at the console.
Example: with this definition,
test() := block([expr,F], expr : diff(f(x), x), F(xx) := at(expr, [x = xx]), let(at(diff(f(x),x),[x=0]),5), letsimp(F(0)) )$
if entered from the console, test() => 5, and if written to a script and then loaded via batch, test() => 'at noun expression.
After stripping the lineinfo, test() => 5 as expected.
Fixed by commit e703a515354ee. Closing this report.