Script to reproduce:
-------------
proc LTrace {args} {
puts "LTrace: $args"
#Hardcoded:
trace remove execution test leave LTrace
}

proc GTrace {args} {puts "This is global trace: $args"}

proc localproc {pname arglist body} {
set caller [lindex [info level 1] 0]
trace add execution $caller leave LTrace
puts "Active traces on $caller: [trace info execution $caller]"
proc $pname $arglist "uplevel 1 [list $body]"
return
}

proc test {a b} {
localproc lproc {} {puts "a=$a, b=$b"}
lproc
set a "A" ; set b "B"
lproc
}

#trace add execution test leave GTrace
test a 4
puts "---------"
test a 5
------------------
In tcl 8.4.19 it gives:

Active traces on test: {leave LTrace}
a=a, b=4
a=A, b=B
LTrace: {test a 4} 0 {} leave
---------
Active traces on test: {leave LTrace}
a=a, b=5
a=A, b=B
LTrace: {test a 5} 0 {} leave

But in tcl 8.6b2 and 8.5.10:

Active traces on test: {leave LTrace}
a=a, b=4
a=A, b=B
---------
Active traces on test: {leave LTrace} {leave LTrace}
a=a, b=5
a=A, b=B
LTrace: {test a 5} 0 {} leave
-----
So, LTrace isn't called first time.

Also, if I uncomment the line "#trace add execution test leave GTrace", then in all tcl versions result becomes:
---
Active traces on test: {leave LTrace} {leave GTrace}
a=a, b=4
a=A, b=B
This is global trace: {test a 4} 0 {} leave
LTrace: {test a 4} 0 {} leave
---------
Active traces on test: {leave LTrace} {leave GTrace}
a=a, b=5
a=A, b=B
This is global trace: {test a 5} 0 {} leave
LTrace: {test a 5} 0 {} leave