Você está recalculando o tamanho da lista todas as vezes. Além disso, ajuste suas expressões .
proc pSampleWithReplace {list samplesize} {
set v_val [list] ;# you know it's a list, so create it as a list
set lmax [expr {[llength $list] - 1}]
for {set j 0} {$j < $samplesize} {incr j} {
lappend v_val [lindex $list [expr {round(rand() * $lmax)}]]
}
return $v_val
}