I worked it out somewhat similarly, but I get a different answer. Looking for holes in it, can’t see any.
Stating knowns:
A : position at which canoe meets log for the first time.
B : upstream turnaround point
C : downstream point at which canoe meets log for the first time.
Vc : velocity of canoe relative to river (positive upriver)
Vl : velocity of log relative to A (positive downriver)
Assumes Vl > 0 and Vc > Vl since the river must be moving, and ‘continues upstream for another hour’ implies some net upstream distance over the hour.
Dab : distance from A to B (and also subsequently the distance from B to A.
Dac = 2 : distance from A to C
Tab = 1 : time from A to B
Tab = Dab / (Vc - Vl)
Dab = Vc - Vl
Tba = Dab / (Vc + Vl)
Tba = (Vc - Vl) / (Vc + Vl)
Tac = Dac / (Vc + Vl)
Tac = 2 / (Vc+Vl)
From the moment at A that the log is first encountered, the log moves downstream at a rate of Vl. It continues moving downstream until the canoeist has gone upstream and all the way back downstream again, so the covered distance based on time is:
(Tab + Tba + Tac)Vl
But the covered distance is also 2 miles downriver of A, so:
(Tab + Tba + Tac)Vl = 2
So:
(1 + (Vc - Vl)/(Vc + Vl) + 2/(Vc + Vl))Vl = 2
Collecting the terms inside over a common (Vc+Vl) denominator:
((Vc+Vl) + (Vc - Vl) + 2)Vl/(Vc+Vl) = 2
Collapsing:
(2Vc + 2)Vl/(Vc+Vl) = 2
Expanding again:
(2VcVl + 2Vl)/(Vc+Vl) = 2
Multiplying by (Vc+Vl)
2VcVl + 2Vl = 2Vc+2Vl
Getting rid of the 2Vl from both sides, and dividing by 2
VcVl = Vc
Dividing by Vc
Vl = 1
I end up with the log floating downriver (with the current) at 1 mi / h.
I also end up with Vc being absolutely anything.