Here's a good hands-on example.
Posets can be thought of as categories where any two objects have at most one arrow between them. If you start with a poset $(P,\leqslant)$ then you can form a category $\mathscr{C}_P$ whose object set is $P$ itself and $u,v\in P$ have an arrow $u\to v$ if and only if $u\leqslant v$.
Conversely, if $\mathscr{C}$ is a small category with at most one arrow between objects, you can form a poset $(P_\mathscr{C},\leqslant_\mathscr{C})$ by saying $u\leqslant_\mathscr{C} v$ if and only if there is an arrow $u\to v$.
Moreover, isomorphisms between posets and their corresponding categories are the same thing. I think that should be easy to see.
So, start with your favorite poset $(P,\leqslant)$. Interpret this then as a category $\mathscr{C}_P$. When you take the opposite category $\mathscr{C}_P^\text{op}$ you clearly get another poset (still at most one arrow!). Which poset? The opposite poset! Namely, $(P,\leqslant_\text{op})$ where $x\leqslant_\text{op}y$ if and only if $y\leqslant x$.
In particular, it's easy to see that $\mathscr{C}_P^\text{op}\cong\mathscr{C}_P$ if and only if $(P,\leqslant_\text{op})\cong(P,\leqslant)$
Now, why is this relevant for us? Take any poset that has a minimal element, but no maximal element (say $\mathbb{N}$ with the normal ordering). Then, it's not hard to see that the $(P,\leqslant_\text{op})$ has a maximal element, but no minimal element! But, these are properties that are preserved under isomorphisms of posets. So, $(P,\leqslant_\text{op})\not\cong (P,\leqslant)$ and so $\mathscr{C}_P^\text{op}\not\cong\mathscr{C}_P$.
Of course, the problem is, as others have pointed out to you, the "isomorphism" flips everything (e.g. the minimal element became the maximal element).
Thinking about posets is a good way to test understanding. Keep it in your back pocket.
Your example is incorrect. Let us write $\mathcal{X}$ for the subcategory of $\mathcal{C}$ which you describe. You are then claiming that the inclusion functor $i:\mathcal{X}\to\mathcal{C}$ is not fully faithful, but the composition $Fi:\mathcal{C}\to\mathcal{D}$ is fully faithful. However, $Fi$ is not full. In particular, for instance, there is a map $Fi(c_1)\to Fi(c_3)$ which is not the image of any map $c_1\to c_3$ under $Fi$.
Note that it is true that a functor is fully faithful iff its composition with an equivalence is fully faithful. This is immediate from the fact that "fully faithful" means "bijection on Hom-sets", and a map is a bijection iff its composition with a bijection is a bijection.
Best Answer
Any concretizable category is isomorphic to a subcategory of $\mathbf{Sets}$. Given a faithful functor $U:\mathcal{C}\to\mathbf{Sets}$, define $U':\mathcal{C}\to\mathbf{Sets}$ by $U'(X)=U(X)\cup\{(X,U(X))\}$ (and on morphisms we use $U$ on the first term of the union and the unique map on the second term). Then $U'$ is still faithful but is injective on objects (since $(X,U(X))$ is the unique element of $U'(X)$ of maximal rank, so $X$ can be recovered from $U'(X)$). It follows that the image of $U'$ is a subcategory of $\mathbf{Sets}$ (we can't have non-composable morphisms in $\mathcal{C}$ that become composable after applying $U'$), and $U'$ gives an isomorphism from $\mathcal{C}$ to this subcategory.