How to find all paths of length up to k between two nodes in a directed graph?
I'm not sure whether "best" is answerable, but I will describe one simple strategy that appears reasonable.  Let $S(u,v,d)$ be the set of all such paths of length $d$.  Then

$$S(u,w,d+1) = \{u \leadsto v \to w \mid u \leadsto v \in S(u,v,d), v \to w \in E\}$$

Also $S(u,u,0) = \{u \to u\}$. This gives a dynamic programming algorithm for computing the set of all such paths, if you evaluate these sets in order of increasing $d$.

As an optimization, you can delete all vertices that aren't reachable from $u$ or that can't reach $v$ before beginning this computation.  As another optimization, you can precompute the matrices $A^k$, where $A^k_{uv}=1$ if there is a path of length $k$ from $u$ to $v$ (these can be obtained from the adjacency matrix by repeated multiplication); then you only evaluate $S(u,w,d)$ for $u,w$ such that $A^d_{uw}=1$ and $A^{k-d}_{wv}=1$.

With these optimizations, if there are a total of $Q$ such paths that you want to output, then the running time will be at most $O(kQ \cdot |E|)$.  There's not much opportunity to do much better than that; obviously any algorithm must take at least $\Omega(Q)$ time, and since $Q$ will typically be exponentially large compared to $k|E|$, the gap between the upper and lower bounds will typically be a small factor compared to the total running time.