FSharp - 153bytes153 143 bytes
let t(s:string)=
let c=s.[2..]|>Seq.map string|>Seq.reduce(+)|>float
matchif s.[0] with
[0]='B'then |'B'->sprintf"Ft%sprintf"Ft%.0f"(ceil(c/2.))
|'F'->sprintf"Bo%else sprintf"Bo%.0f"(c*2.-1.)
Updates
- Knocked a few bytes off by switching from pattern matching to a simple
if ... then ...