These two packages seem to largely do the same thing? What is the intended difference between these two packages and also which should I be using?
Pipelines is the newer --experimental-- (Edit: It is no longer in Experimental, but now a proper library) library. It has additional constructs like "SimpleSynth" and can do things like check the code for the pipeline and update the pipeline along with deploying your code/infrastructure. It incorporates a lot of CodePipelineActions into the same constructs that create the stages - I suppose the idea is to remove a little of the customization to make it a bit easier to code (generally curs the number of instantiation in half of various constructs)
In most cases, it's kinda overkill. Plus until you and your team have a lot of Base knowledge of cdk it can be dangerous - thr self mutating aspect of your pipeline being able to update and mutate itself when you update your source (a thing that CICD likes) can mean if you make a mistake you can lock your app out of deploying.
Also it's still experimental - meaning they may break dependencies or invalidate older methods at any time.
I'd stick with CodePipeline and CodePipelineActions until you're very comfortable with using cdk and using it for a pipeline in general before experimenting with Pipelines (and generally any library that doesn't start with aws! Except Core most of those are experimental )